从log4j 1.2.17迁移后的log4j 2.2问题

时间:2015-04-02 11:44:49

标签: java logging log4j log4j2

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

  1. 我的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>

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

    1. 当我关闭我的应用程序时,现在我收到以下错误:
    2. 线程中的异常" 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)。
      2. 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 个答案:

答案 0 :(得分:4)

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

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

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