【发布时间】: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