我已经从log4j 1.2.17迁移到log4j 2.2。我收到了以下问题:
我的AsyncLogger就像同步一样。这是我对此记录器的配置:
< RollingFile name =" ACCESS_LOG" 文件名=" $ {SYS:log.dir} vproxy_access $ {日期:YYYY-MM-DD}。" filePattern =" $ {SYS:log.dir} vproxy_access $ {日期:YYYY-MM-DD}。" 追加="真" bufferedIO ="真" BUFFERSIZE =" 8192" immediateFlush ="假"> <&的PatternLayout GT; <模式>%m%d {yyyy-MM-dd HH:mm:ss}%n < /&的PatternLayout GT; <策略/> < / RollingFile>
< AsyncLogger name =" LOGGER_ACCESS"级="信息" includeLocation ="真"加="假"> < AppenderRef ref =" ACCESS_LOG" /> < / AsyncLogger>
日志创建是正确的,但是我记录到此文件的所有内容都没有缓冲,并且会立即提交这些行。我已经将我的配置与我在其他帖子中看到的其他人进行了比较,我看不出有什么问题。
线程中的异常" pool-1-thread-1" java.lang.NoClassDefFoundError:org / apache / logging / log4j / message / ParameterizedMessage 在org.apache.logging.log4j.message.ParameterizedMessageFactory.newMessage(ParameterizedMessageFactory.java:47) 在org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:737) 在org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:708) 在org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:314) 在org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:77) 在java.lang.Thread.run(Thread.java:745) 引起:java.lang.ClassNotFoundException:org.apache.logging.log4j.message.ParameterizedMessage 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) ......还有6个
出现此错误时,我没有记录任何内容。我记录的最后一行在相应的日志中正确显示。
2015-04-02 13:58:51启动消息服务...
^ [[?1; 2c ^ [[?1; 2c2015-04-02 13:59:06]邮件服务已成功启动。
2015-04-02 13:59:06启动平衡器测试端口......
2015-04-02 13:59:06平衡器测试端口成功启动。
提前致谢。
琼。
答案 0 :(得分:4)
这是预期的行为。后台线程只是跟上应用程序放入队列的日志事件。请注意,对于log4j2,如果队列为空,异步日志记录将刷新缓冲区,因此磁盘上的结果立即可见。 (请参阅FileAppender immediateFlush的文档。)
您可能需要将log4j-web模块添加到部署中。这对于清理Web应用程序中的log4j资源是必要的,并且还将禁用关闭挂钩。请参阅https://logging.apache.org/log4j/2.x/manual/webapp.html
这个比较棘手......你能提供完整的log4j2配置吗?是否有2个进程写入同一个文件?