首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的自定义Log4j2配置文件Java中的日志记录时间不正确

我的自定义Log4j2配置文件Java中的日志记录时间不正确
EN

Stack Overflow用户
提问于 2017-10-05 12:46:20
回答 1查看 799关注 0票数 0

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

下面是我的Log4j2 XML配置文件:

代码语言:javascript
复制
<?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>

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

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

代码语言:javascript
复制
 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
EN

回答 1

Stack Overflow用户

发布于 2017-10-05 13:46:16

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

有关详细信息,请参阅https://logging.apache.org/log4j/2.x/manual/async.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46578015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档