从 log4j 1.2.17 迁移后的 log4j 2.2 问题

log4j 2.2 issues after migrating from log4j 1.2.17

我已经从 log4j 1.2.17 迁移到 log4j 2.2。我遇到了以下问题:

  1. 我的 AsyncLogger 像同步一样工作。这是我对此记录器的配置:

    <滚动文件名="ACCESS_LOG" fileName="${sys:log.dir}vproxy_access.${date:yyyy-MM-dd}" filePattern="${sys:log.dir}vproxy_access.${date:yyyy-MM-dd}" 追加="true" 缓冲IO="true" bufferSize="8192" immediateFlush="false"> <图案布局> <模式>%m%d{yyyy-MM-dd HH:mm:ss}%n <政策/>

日志创建是正确的,但是我记录到这个文件的所有内容都没有被缓冲并且行被立即提交。我已经将我的配置与我在其他帖子中看到的其他配置进行了比较,但我看不出有什么问题。

  1. 当我关闭我的应用程序时,出现以下错误:

线程中的异常 "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 个

出现此错误时,我没有记录任何内容。我记录的最后一行在其相应的日志中正确显示。

  1. 使用同步记录器记录文件时,偶尔会出现奇怪的字符。请参阅下面的“^[[?1;2c^[[?1;2c”(这在 1.2.17 中没有发生)。

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平衡器测试端口成功启动。

提前致谢。

琼.

  1. 这是预期的行为。后台线程只是跟上您的应用程序放入队列中的日志事件。请注意,对于 log4j2,如果队列为空,异步日志记录将刷新缓冲区,因此结果会立即在磁盘上可见。 (请参阅 FileAppender immediateFlush 的文档。)

  2. 您可能需要将 log4j-web 模块添加到您的部署中。这是清理 Web 应用程序中的 log4j 资源所必需的,并且还将禁用关闭挂钩。参见 https://logging.apache.org/log4j/2.x/manual/webapp.html

  3. 这个比较棘手...你能提供完整的 log4j2 配置吗?有没有可能有 2 个进程写入同一个文件?