从log4j 1.2.17迁移后的log4j 2.2问题

JBa*_*ero 2 java logging log4j log4j2

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

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

    <RollingFile name =“ ACCESS_LOG” fileName =“ $ {sys:log.dir} vproxy_access。$ {date:yyyy-MM-dd}” filePattern =“ $ {sys:log.dir} vproxy_access。$ {date:yyyy- MM-dd}“ append =” true“ bufferedIO =” true“ bufferSize =” 8192“ InstantFlush =” false“> <PatternLayout> <Pattern>%m%d {yyyy-MM-dd HH:mm:ss}%n </ PatternLayout> <Policies /> </ RollingFile>

    <AsyncLogger name =“ LOGGER_ACCESS” level =“ info” includeLocation =“ true” additivity =“ false”> <AppenderRef ref =“ ACCESS_LOG” /> </ AsyncLogger>

日志创建是正确的,但是我登录到该文件的所有内容均未缓冲,并且行会立即提交。我已经将自己的配置与其他文章中看到的其他配置进行了比较,但我看不出有什么问题。

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

线程“ pool-1-thread-1”中的异常java.lang.NoClassDefFoundError:org.apache.logging.log4j.message.ParameterizedMessageFactory.newMessage(ParameterizedMessageFactory.java:47)上的org / apache / logging / log4j / message / ParameterizedMessage在org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:737)在org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:708)在org.apache.logging.log4j org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:77)上的.spi.AbstractLogger.error(AbstractLogger.java:314)在java.lang.Thread.run(Thread.java:745) )由以下原因引起:java.lang.ClassNotFoundException:org.apache.catalina.loader.WebappClassLoader上的org.apache.logging.log4j.message.ParameterizedMessage。org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)的loadClass(WebappClassLoader.java:1680)...还有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平衡器测试端口已成功启动。

提前致谢。

Rem*_*pma 6

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

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

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