我正在尝试按照log4j文档的大小和间隔实现一个异步日志系统。
https://logging.apache.org/log4j/2.x/manual/appenders.html
这是一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingRandomAccessFile name="RollingRandomAccessFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true"/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingRandomAccessFile"/>
</Root>
</Loggers>
</Configuration>
我的配置:
<RollingRandomAccessFile name="FooLog" fileName="${path}/foo.log"
filePattern="${path}/$${date:yyyy-MM-dd}/foo-%d{yyyy-MM-dd-HH}-%i.log.gz" immediateFlush="false">
<PatternLayout>
<Pattern>|%d|%p|%c{1.}|[%t]|%m|%ex%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="${interval}" modulate="true" />
<SizeBasedTriggeringPolicy size="${fileSize}" />
</Policies>
</RollingRandomAccessFile>
我的结果是文件:
LOG \ 2018年4月4日\ FOO-2018-04-04-17-1.log.gz
LOG \ 2018年4月4日\ FOO-2018-04-04-17-2.log.gz
LOG \ 2018年4月4日\ FOO-2018-04-04-17-3.log.gz
LOG \ 2018年4月4日\ FOO-2018-04-04-17-4.log.gz
LOG \ 2018年4月4日\ FOO-2018-04-04-17-5.log.gz
我当地时间 2018-04-04 15:11:38,724 (写在日志内容中)。 日志文件的名称应为:log \ 2018-04-04 \ foo-2018-04-04-15-n.log.gz
我使用fileSize = 10 KB和interval = 6进行这些测试。我做错了什么?
修改
问题是间隔值,在这种情况下为6,将值添加到文件名的时间。我该如何解决这个问题并继续轮换几个小时?
SOLUTION:
我通过CronTriggeringPolicy更改TimeBasedTriggeringPolicy并使用一个值来解决我的问题,每三个小时写一次文件。这样,带有时间的文件名不受影响。
答案 0 :(得分:1)
原因可能是记录器使用不同的时区。
假设您希望时区为UTC。
您可以尝试强制记录器使用特定的时区。
filePattern="${path}/$${date:yyyy-MM-dd}/foo-%d{yyyy-MM-dd-HH}{UTC}-%i.log.gz"
请注意在上面的代码段中添加了{UTC}。您需要将UTC替换为您选择的时区。
根据评论进行更新
由于需要GMT + 1时区,因此可以使用以下内容。
filePattern="${path}/$${date:yyyy-MM-dd}/foo-%d{yyyy-MM-dd-HH}{GMT+1}-%i.log.gz"
有关详细信息,可以在文档here的表格中看到 d {pattern} - date {pattern} 行。
根据“您还可以使用一组包含每java.util.TimeZone.getTimeZone
时区ID的大括号。如果没有给出日期格式说明符,则使用DEFAULT格式。”