我试图弄清楚如何使log4j在我的项目中工作.我有2个类,一个类名为testWithMain.TestSectionSplit,另一个类名为search.SectionScanner.在TestSectionSplit我打电话
Logger log = Logger.getLogger(TestSectionSplit.class);
PropertyConfigurator.configure(FilePaths.LOGGER_CONFIG);
其中FilePaths.LOGGER_CONFIG指向配置文件.
在SectionScanner类中,我只是创建一个静态字段
private Logger logger = Logger.getLogger(SectionScanner.class);
配置文件看起来像
# =========================
# appenders configuration
# =========================
# console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.threshold=ALL
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# =========================
# loggers configuration
# =========================
log4j.rootLogger=ALL, console
log4j.logger.search.SectionScanner=ALL, console
问题是,虽然在控制台上正确记录了在TestSectionSplit中记录的消息,但是没有打印来自SectionScanner的消息,给了我此错误消息
log4j:ERROR Attempted to append to closed appender named [console].
如果我注释掉
log4j.logger.search.SectionScanner=ALL, console
在配置文件中,不会打印任何日志消息或错误.
我不明白我在做什么错.
解决方法:
通过在代码中调用PropertyConfigurator.configure(),可以在初始化log4j之后重新配置它.无论首先使用哪种配置进行初始化,它都具有一个名为“ console”的附加程序.当您重新初始化log4j时,该附加程序将关闭,但其他线程正在尝试对其进行写入:因此出错.如果这是您要使用的配置,请从configure your app开始使用它,而不是在应用程序运行时重新初始化日志记录.
标签:log4j,java
来源: https://codeday.me/bug/20191208/2089357.html