Apache Karaf 4.2.9中TimeBasedRollingPolicy支持性及配置问询
关于Apache Karaf 4.2.9中Pax Logging配置TimeBasedRollingPolicy的问题
需求说明
使用Apache Karaf内置的Pax Logging配置TimeBasedRollingPolicy实现日志按天滚动,由于核心代码不可见,只能通过覆写属性的方式启用该策略,且不需要使用SizeBasedTriggeringPolicy。
问题
- Apache Karaf 4.2.9是否支持
TimeBasedRollingPolicy? - 若支持,请提供包含
TimeBasedRollingPolicy及相关属性的org.ops4j.pax.logging.cfg示例配置文件?
当前使用的org.ops4j.pax.logging.cfg配置
# 滚动文件追加器 log4j2.appender.rolling.type = RollingRandomAccessFile log4j2.appender.rolling.name = RollingFile log4j2.appender.rolling.fileName = [路径]/karaf.log log4j2.appender.rolling.filePattern = [路径]/app-name-%d{yyyy-MM-dd-HH-mm}-%i.log # 取消注释可关闭强制磁盘刷新 #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 # 审计文件追加器 log4j2.appender.audit.type = RollingRandomAccessFile log4j2.appender.audit.name = AuditRollingFile log4j2.appender.audit.fileName = [路径]/security.log log4j2.appender.audit.filePattern = [路径]/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追加器 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
问题解答
问题1:Apache Karaf 4.2.9是否支持TimeBasedRollingPolicy?
Apache Karaf 4.2.9内置的Pax Logging基于Log4j 2.x,TimeBasedRollingPolicy对应Log4j 2.x中的TimeBasedTriggeringPolicy,是标准的时间滚动触发策略,因此Karaf 4.2.9完全支持该功能,只需通过配置属性覆写即可启用。
问题2:示例配置文件
以下是仅使用时间滚动策略实现按天滚动的org.ops4j.pax.logging.cfg配置示例,已移除SizeBasedTriggeringPolicy相关内容:
# 滚动文件追加器(按天滚动) log4j2.appender.rolling.type = RollingRandomAccessFile log4j2.appender.rolling.name = RollingFile log4j2.appender.rolling.fileName = [路径]/karaf.log # 按天命名归档日志,%d{yyyy-MM-dd}指定日期格式 log4j2.appender.rolling.filePattern = [路径]/app-name-%d{yyyy-MM-dd}.log 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.time.type = TimeBasedTriggeringPolicy # 滚动间隔为1天 log4j2.appender.rolling.policies.time.interval = 1 # 开启时间调制,确保滚动时间对齐到自然天(如凌晨0点) log4j2.appender.rolling.policies.time.modulate = true # 审计文件追加器(按天滚动) log4j2.appender.audit.type = RollingRandomAccessFile log4j2.appender.audit.name = AuditRollingFile log4j2.appender.audit.fileName = [路径]/security.log log4j2.appender.audit.filePattern = [路径]/security-%d{yyyy-MM-dd}.log 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.time.type = TimeBasedTriggeringPolicy log4j2.appender.audit.policies.time.interval = 1 log4j2.appender.audit.policies.time.modulate = true # OSGi追加器 log4j2.appender.osgi.type = PaxOsgi log4j2.appender.osgi.name = PaxOsgi log4j2.appender.osgi.filter = *
注意事项:
- Log4j 2.x中时间滚动触发策略的正确类型是
TimeBasedTriggeringPolicy,而非Log4j 1.x中的TimeBasedRollingPolicyfilePattern中的%d{yyyy-MM-dd}确保每天生成一个独立的归档日志文件,无需%i分片标识modulate=true会让滚动时间对齐到自然天起始点,避免从服务启动时间开始计算24小时的偏移
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

