2013-07-11 42 views
0

其中log4j2.xml应放置在applet中使用?它可以记录到Java控制台和用户计算机上的文件吗?配置log4j2以供小程序使用

+0

*“可以它既登录到Java控制台和**文件用户的电脑吗?” ***只有当代码进行数字签名由你,并由最终用户信任。 –

+0

是的,它已经签署。我怎样才能将log4j2.xml传递给applet?用户磁盘上的什么位置会显示日志? – YuriR

回答

0

我放置在小程序资源conf/log4j2.xml中并从小程序读取它。 applet装入它不正确的,所以我从固定applet代码的字段:

public static Logger getLogger(Class className) { 

    //get logger configuration 
    LoggerContext loggerContext = Configurator.initialize("client", className.getClassLoader(), className.getClassLoader().getResource("conf/log4j2.xml").getFile()); 
    Configuration configuration = loggerContext.getConfiguration(); 

    //set root logger to desired level 
    LoggerConfig loggerConfig = configuration.getLoggerConfig(""); 
    loggerConfig.setLevel(Level.INFO); 

    //obtain appender 
    Appender appender = obtainAppender(configuration); 

    //get logger for required class 
    org.apache.logging.log4j.core.Logger loggerForClass = loggerContext.getLogger(className.getName()); 

    //associate logger for required class with just created appender 
    configuration.addLoggerAppender(loggerForClass, appender); 

    return loggerForClass; 
} 

private static Appender obtainAppender(Configuration configuration) { 

    //create appender 
    TriggeringPolicy[] triggeringPolicies = {OnStartupTriggeringPolicy.createPolicy(), TimeBasedTriggeringPolicy.createPolicy("5", "true"), SizeBasedTriggeringPolicy.createPolicy("5 MB")}; 
    TriggeringPolicy triggeringPolicy = CompositeTriggeringPolicy.createPolicy(triggeringPolicies); 
    return RollingFileAppender.createAppender(CLIENT_LOG_PATH + FileUtils.FILE_SEPARATOR + "my_client.log", 
      CLIENT_LOG_PATH + FileUtils.FILE_SEPARATOR + "/$${date:yyyy-MM}/my_client-%d{MM-dd-yyyy-HH-mm}-%i.log", 
      "", APPLET_APPENDER, 
      "true", "true", 
      triggeringPolicy, null, 
      PatternLayout.createLayout("%d{dd/MM/yyyy HH:mm:ss} %-5p [%t] [%c{1}] %m%n", configuration, null, "UTF-8"), 
      null, "true", configuration); 
}