我在一个使用Log4J的项目中工作。要求之一是为每个线程创建一个单独的日志文件;这本身就是一个奇怪的问题,通过动态创建一个新的 FileAppender 并将其附加到 Logger 实例来进行排序。
Logger logger = Logger.getLogger(<thread dependent string>);
FileAppender appender = new FileAppender();
appender.setFile(fileName);
appender.setLayout(new PatternLayout(lp.getPattern()));
appender.setName(<thread dependent string>);
appender.setThreshold(Level.DEBUG);
appender.activateOptions();
logger.addAppender(appender);
一切都很顺利,直到我们意识到我们使用的另一个库 - Spring Framework v3.0.0(它使用Commons Logging) - 无法使用上述技术 - Spring 日志数据仅由从 log4.configuration 初始化的 Appenders “看到”文件,但不是由运行时创建的 Appenders。所以,回到第一方。
经过一番调查,我发现新的和改进的LogBack有一个附加程序 - SiftingAppender - 它完全可以满足我们的需要,即在独立文件上进行线程级日志记录。
目前,迁移到 LogBack 不是一种选择,所以,被 Log4J 卡住了,我怎样才能实现类似 SiftingAppender 的功能并让 Spring 满意呢?
注意:Spring 仅用于JdbcTemplate功能,没有 IOC;为了将 Spring 的 Commons Logging “挂钩”到 Log4J,我在 log4j.properties 文件中添加了这一行:
log4j.logger.org.springframework=调试
按照这里的指示。