我需要使用内置的 pax 日志记录来编写 Apache Karaf 日志记录,以便在 TimeBasedRollingPolicy 中每天滚动。
由于代码是隐藏的,我只能覆盖属性来利用TimeBasedRollingPolicy。
Q1) Apache Karaf 4.2.9 是否支持 TimeBasedRollingPolicy? Q2)如果是,任何人都可以共享带有 TimeBasedRollingPolicy 和相关属性的示例 cfg 文件吗?
我不要 SizeBasedTriggeringPolicy,只要 TimeBasedRollingPolicy。我必须通过代码来处理这个问题。
org.ops4j.pax.logging.cfg 显示如下:
`# Rolling file appender
log4j2.appender.rolling.type = RollingRandomAccessFile
log4j2.appender.rolling.name = RollingFile
log4j2.appender.rolling.fileName = [path]/karaf.log
log4j2.appender.rolling.filePattern = [path]/app-name-%d{yyyy-MM-dd-HH-mm}-%i.log
# uncomment to not force a disk flush
#log4j2.appender.rolling.immediateFlush = false
log4j2.appender.rolling.append = true
log4j2.appender.rolling.layout.type = PatternLayout
log4j2.appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
log4j2.appender.rolling.policies.type = Policies
log4j2.appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.rolling.policies.size.size = 16MB
# Audit file appender
log4j2.appender.audit.type = RollingRandomAccessFile
log4j2.appender.audit.name = AuditRollingFile
log4j2.appender.audit.fileName = [path]/security.log
log4j2.appender.audit.filePattern = [path]/security.log.%i
log4j2.appender.audit.append = true
log4j2.appender.audit.layout.type = PatternLayout
log4j2.appender.audit.layout.pattern = %m%n
log4j2.appender.audit.policies.type = Policies
log4j2.appender.audit.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.audit.policies.size.size = 8MB
# OSGi appender
log4j2.appender.osgi.type = PaxOsgi
log4j2.appender.osgi.name = PaxOsgi
log4j2.appender.osgi.filter = *
log4j2.appender.rolling.policies.time.type = TimeBasedRollingPolicy
log4j2.appender.rolling.policies.time.interval = 1
log4j2.appender.rolling.policies.time.modulate = TRUE
log4j.appender.out.file = ${mkv.logsdir}/karaf.log`
首先-检查Log4j2 RolloverStrategies-没有
TimeBasedRollingPolicy
之类的东西(该名称在Logback中可用)。
但是有
TimeBasedTriggeringPolicy
,这里的工作配置每 15 秒滚动一次:
log4j2.appender.timerolling.type = RollingRandomAccessFile
log4j2.appender.timerolling.name = TimeRollingFile
log4j2.appender.timerolling.fileName = ${karaf.log}/time.log
log4j2.appender.timerolling.filePattern = ${karaf.log}/time.log.%d{yyyy-MM-dd-HH-mm-ss}
log4j2.appender.timerolling.append = true
log4j2.appender.timerolling.layout.type = PatternLayout
log4j2.appender.timerolling.layout.pattern = ${log4j2.pattern}
log4j2.appender.timerolling.policies.type = Policies
log4j2.appender.timerolling.policies.time.type = TimeBasedTriggeringPolicy
log4j2.appender.timerolling.policies.time.interval = 15
interval=15
可能令人困惑,但(在阅读源代码后)它的意思是“每 15 个文件模式中指定的最小单位翻转一次”。
因此,如果模式是${karaf.log}/time.log.%d{yyyy-MM}
,您将每 15 个月触发一次。
通过上述设置并稍等一下,我有这些文件:
time.log
time.log.2023-02-24-09-43-48
time.log.2023-02-24-09-44-18
time.log.2023-02-24-09-44-34