我是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发布于 2017-10-05 13:46:16
当日志以异步方式完成时,您可以将消息记录到单独的队列中。它们在处理时由后台线程加时间戳,后台线程将日志写入磁盘(因为时间戳是附加器模式的一部分)。因此,只有顺序被保留。时间戳可能略有不同。
有关详细信息,请参阅https://logging.apache.org/log4j/2.x/manual/async.html。
https://stackoverflow.com/questions/46578015
复制相似问题