我希望我的 solr-indexer 日志在世界标准时间 (UTC) 每天上午 12 点滚动,这意味着 .gz 文件应在每天 00:00:00UTC 创建,并且应包含前一天从 00 开始的所有日志:00:00UTC 并在 23:59:59UTC 结束。 例如,11 月 21 日 00:00:00UTC 创建的日志(.gz)文件应包含 11 月 20 日的所有 24 小时日志。
这就是我的 log4j2 xml 文件的样子:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" packages="com.fidelis.k2.logging.filter">
<Properties>
<Property name="log_path">/opt/k2/logs</Property>
<Property name="log_pattern">%t - %d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="rollingFile" fileName="${log_path}/solr_data_uploader.log"
filePattern="${log_path}/solr_data_uploader-%d{yyyy-MM-dd}.log.gz">
<PatternLayout>
<pattern>${log_pattern}</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="false" timeUnit="days"/>
</Policies>
<DefaultRolloverStrategy max="15"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.fidelis.k2" level="info" additivity="false">
<AppenderRef ref="rollingFile"/>
</Logger>
<Root level="info">
<AppenderRef ref="console"/>
</Root>
</Loggers>
我也尝试使用 modulate="true" ,但它没有在 zip 文件中显示一整天的日志。 目前,日志文件(出于某种未知原因)每天在 06:10UTC 创建,并且不包含全天的日志。
滚动文件附加程序使用
%d{...}
模式中的时区来确定一天何时结束。日期模式的一般形式是:
%d{format specifiers}{timezone}
如果缺少
timezone
参数,则默认为系统时区。
如果你想以UTC为基础进行旋转,只需更改:
<RollingFile name="rollingFile"
fileName="${log_path}/solr_data_uploader.log"
filePattern="${log_path}/solr_data_uploader-%d{yyyy-MM-dd}.log.gz">
到
<RollingFile name="rollingFile"
fileName="${log_path}/solr_data_uploader.log"
filePattern="${log_path}/solr_data_uploader-%d{yyyy-MM-dd}{UTC}.log.gz">