Wildfly-Swarm中Periodic-Rotating-File-Handler的YAML配置失效排查
解决WildFly Swarm日志配置的两个问题
你的配置存在两处关键问题导致日志行为不符合预期,下面是修正后的完整配置和详细说明:
修正后的日志配置
swarm: logging: root-logger: level: DEBUG handlers: - DEBUGFILE - CONSOLE periodic-rotating-file-handlers: DEBUGFILE: level: DEBUG enabled: true autoflush: true named-formatter: MY_PATTERN file: path: logs/debugfile.log suffix: .yyyy-MM-dd console-handlers: CONSOLE: level: DEBUG named-formatter: MY_PATTERN pattern-formatters: MY_PATTERN: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%t) [%c] %s%e%n" loggers: de.myname: level: DEBUG
问题原因与修复解释
1. debugfile.log为空的问题
你之前把root-logger放在了logging-profiles节点下,但WildFly Swarm默认不会启用日志配置文件(logging profiles),除非你通过系统属性或其他方式显式指定使用该profile。这就导致你的自定义root logger完全没生效,DEBUGFILE处理器根本没被关联到任何活跃的日志记录器上,所以文件虽然被创建,但没有日志写入。
修复方法:将root-logger直接移到logging根节点下,这样它就会成为全局默认的root logger,所有日志都会经过它指定的处理器。
2. CONSOLE始终输出INFO级别的问题
WildFly Swarm的默认root logger级别是INFO,而你之前的自定义root logger在未启用的logging profile里,所以CONSOLE处理器实际上使用的是默认root logger的INFO级别限制。同时你单独配置的de.myname logger级别为DEBUG,所以只有这个包下的类能输出DEBUG日志。
修复后:
- 全局root logger级别设为
DEBUG,确保所有日志(包括非de.myname包的)都会被收集到DEBUG级别 CONSOLE处理器的级别也设为DEBUG,确保它能输出所有收集到的DEBUG及以上级别的日志
额外注意事项
- 日志路径的
logs目录:虽然你提到文件已创建,但如果目录不存在,部分情况下WildFly Swarm可能会静默失败(不过通常它会自动创建目录,这里仅作提醒) - 双重过滤机制:logger的
level决定收集哪些级别的日志,处理器的level决定输出哪些级别的日志,只有两者都满足的日志才会被最终输出,所以两者的配置都要符合预期。
内容的提问来源于stack exchange,提问作者Urr4
相关产品推荐
相关产品推荐

