Log4J2 - 在运行时更改fileName

时间:2015-11-11 14:45:46

标签: log4j2

任何人都可以告诉我是否可以在运行时更改fileName。 到目前为止,我已成功将log4j.properties迁移到log4j2.properties。 appenders,loggers都在创建。如果我对fileName进行硬编码,那么我的日志就会被填充。但不幸的是,logname必须是服务名称,我只会在运行时知道服务名称。这可能早于Log4j 1.x.之前调用fileAppender.setFile(logFile.getAbsolutePath());将在运行时更改fileName。我现在需要用log4J 2.4.1做类似的事情。我尝试删除appender,以编程方式重新创建它并将appender添加到配置但没有成功。正在创建空日志文件,但名称正确。请任何人帮助我,因为我无法解决这个问题。下面是我尝试删除的代码片段,重新创建了appender。

RollingFileAppender fileAppender = (RollingFileAppender) this.config.getAppender(loggerName);
String filePattern = fileAppender.getFilePattern();
TriggeringPolicy policy = fileAppender.getTriggeringPolicy();
RolloverStrategy strategy = fileAppender.getManager().getRolloverStrategy();
PatternLayout layout = (PatternLayout) fileAppender.getLayout();
Filter filter = fileAppender.getFilter(); 
LoggerConfig lgConfig = this.config.getLogger(loggerName);
RollingFileAppender rollingFile = RollingFileAppender.createAppender(fileName, filePattern, "true", loggerName, (String)null, (String)null, (String)null, policy, strategy, layout, filter, (String)null, "false", (String)null, config);

config.removeAppender(loggerName);
config.removeLogger(loggerName);
config.addLogger(loggerName, lgConfig);
context.updateLoggers();
config.addAppender((Appender)rollingFile);

logger = LogManager.getLogger(loggerName);

“fileName”已在我们到达此位代码时设置。

1 个答案:

答案 0 :(得分:0)

您应该能够创建自定义查找以获取服务名称,然后在配置文件中引用它。

Here is an example如何创建自定义查找。