当前位置: 首页 > 知识库问答 >
问题:

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

梁俊友
2023-03-14

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

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

<?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选项进行异步日志记录:

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

共有1个答案

公羊俊德
2023-03-14

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

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

 类似资料:
  • 问题内容: 我有一个dropwizard应用程序,在该应用程序中,我配置了logger附加程序,使其文件如下: 并且,在我的应用中创建了记录器: 在main()中进行一些测试记录: 该应用程序启动并运行没有问题。但是我没有在stdout或mylogs.log文件中得到任何日志(当然,除了Jetty访问日志之外,这些日志也已正确打印到mylogs.log中)。相反,如果我删除configuratio

  • 在Prod就绪的日志记录世界中,是否有类似于依赖于环境的日志记录配置文件的东西。我的意思是。通常情况下,不同的环境需要不同的细节级别。 实际上,它需要创建多个日志配置文件,当有许多环境时,添加新的记录器就变得非常痛苦。我要找的是: 对于某些Prod就绪的Java日志记录解决方案来说,这种情况是否存在?

  • 我在为Oracle SOA套件开发自定义log4j2记录器方面处于中间位置。类是一个胖的或自包含的罐子。它有一个log4j2.xml配置文件,其中有一个记录器和附加器 null 运行JUnit测试时,记录器会按预期写入jsonLogger.json文件。 在我的weblogic服务器上,我部署了log4j2.xml配置文件,并将Java属性log4j.configurationfile设置到log

  • 问题内容: 我是Python日志记录包的新手,并计划将其用于我的项目。我想根据自己的喜好定制时间格式。这是我从教程中复制的简短代码: 这是输出: 我想将时间格式缩短为:“ ”,删除毫秒后缀。我看着Formatter.formatTime,但是很困惑。感谢您为实现我的目标所提供的帮助。谢谢。 问题答案: 从有关Formatter类的官方文档中: 构造函数采用两个可选参数:消息格式字符串和日期格式字符

  • 问题内容: 我想以自己的格式记录来自net / http的错误。在net / http包中,我找到了Server结构: 我想用自己的实现代替logger: 实施此方法的正确方法是什么? 更新: 我有以下配置的zap记录器: 它配置为以json格式编写。我希望以与zap相同的方式编写错误。我创建以下内容: 问题: 方法的主体应该是什么? 我应该检索io.Writer以便通过它吗?这该怎么做? 问题答