You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Karaf 4.2.9中TimeBasedRollingPolicy支持性及配置问询

关于Apache Karaf 4.2.9中Pax Logging配置TimeBasedRollingPolicy的问题

需求说明

使用Apache Karaf内置的Pax Logging配置TimeBasedRollingPolicy实现日志按天滚动,由于核心代码不可见,只能通过覆写属性的方式启用该策略,且不需要使用SizeBasedTriggeringPolicy。

问题

  1. Apache Karaf 4.2.9是否支持TimeBasedRollingPolicy?
  2. 若支持,请提供包含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中的TimeBasedRollingPolicy
  • filePattern中的%d{yyyy-MM-dd}确保每天生成一个独立的归档日志文件,无需%i分片标识
  • modulate=true会让滚动时间对齐到自然天起始点,避免从服务启动时间开始计算24小时的偏移

内容的提问来源于stack exchange,提问作者Ashish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:21:38