【问题标题】:Logging time incorrect in my custom Log4j2 XML configuration file Java我的自定义 Log4j2 XML 配置文件 Java 中的记录时间不正确
【发布时间】:2017-10-05 04:46:19
【问题描述】:

我是 log4j2 的新手。以前我使用的是 log4j。我迁移到第 2 部分的原因是为了异步日志记录。在互联网上搜索后,我可以编写一个配置文件,它实际上创建了两个日志文件“Errors.log”和“Messages.log”。现在的问题是:我将与远离我的服务器通信。我编写了一个与服务器通信并发送请求的客户端,然后服务器向我发送响应。在任何情况下,请求至少需要 10 毫秒才能到达服务器并从中取回响应。但在我的日志文件中,它显示发送到服务器的请求和从服务器接收的请求是同时的(相同的毫秒)。我正在使用异步日志记录。这会导致错误的时间戳吗?还是我使用的政策造成了这些问题?

下面是我的 Log4j2 XML CONFIG 文件:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn">
  <Appenders>
  <File name="my_file_appender" fileName="LOG4j_LOGS/Errors.log" immediateFlush="false" append="false">
      <PatternLayout>
       <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</Pattern>
      </PatternLayout>
    </File>
    <Async name="async_appender">
    <AppenderRef ref="my_file_appender" />
   </Async>
     <!-- file appender -->
     <RollingFile name="Error-log" fileName="LOG4j_LOGS/Messages.log"
                 filePattern="LOG4j_LOGS/Messages-%d{yyyy-MM-dd}.log">
      <!-- log pattern -->   
         <PatternLayout>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</Pattern>
        </PatternLayout>
        <!-- set file size policy -->
        <Policies>
           <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="100 MB" />
        </Policies>
        <DefaultRolloverStrategy max="25"/>
    </RollingFile>   
  </Appenders>   
  <Loggers>
      <Logger name="Error-log" level="info" additivity="false">
       <appender-ref ref="Error-log" level="debug"/>
       </Logger>
       <Root level="info" includeLocation="false">
            <AppenderRef ref="async_appender"/>
      </Root>
  </Loggers>
</Configuration>

任何人都可以检查我的 CONFIG 文件。我想要的只是创建两个单独的日志文件,一个用于存储信息消息,另一个用于存储错误。这应该在我每次运行我的应用程序时创建一个新文件,并且它不应该删除以前的日志。日志的大小可以是任何值。如果大小超过它应该创建一个新文件并将数据写入其中。无论我运行应用程序多少天,都需要存储每日日志,并且整个过程必须异步完成。

我还使用以下 VM 选项进行异步日志记录:

 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

【问题讨论】:

    标签: java xml logging log4j2 configuration-files


    【解决方案1】:

    当日志记录是异步完成时,您会将消息记录到一个单独的队列中。它们在处理时由将日志写入磁盘的后台线程加盖时间戳(因为时间戳是 Appender 模式的一部分)。所以只保留顺序。时间戳可能略有不同。

    请参阅https://logging.apache.org/log4j/2.x/manual/async.html 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2014-06-17
      • 2013-06-29
      • 2017-03-16
      • 2017-10-28
      • 2015-05-06
      • 2013-09-11
      • 2015-09-29
      • 1970-01-01
      相关资源
      最近更新 更多