Wildfly Swarm日志重复问题:com.company日志文件条目重复
解决WildFly Swarm中com.company日志在文件中重复的问题
首先,先把你的日志配置整理成更易读的结构化格式:
swarm: logging: console-handlers: STDOUT: level: DEBUG periodic-rotating-file-handlers: FILE: level: DEBUG file: path: log/app.log formatter: '%d %-5p [%t] %c: %m%n' suffix: yyyy-MM-dd root-logger: level: INFO handlers: - STDOUT - FILE loggers: com.company: level: DEBUG
针对你遇到的com.company日志仅在文件中重复输出,控制台正常的问题,以下是几个实用的排查和解决思路:
1. 关闭Logger的Additivity属性
默认情况下,子Logger(比如com.company)的additivity属性为true,这意味着子Logger处理完日志后,会把日志传递给父Logger(这里是root logger)的handlers。结合你的配置逻辑:
com.company设为DEBUG级别,会接收所有DEBUG及以上的日志- root logger的级别是
INFO,但你给FILE handler单独设了DEBUG级别,所以当com.company的DEBUG日志传递到root后,FILE handler依然会输出这些日志 - 这就可能导致同一日志条目被FILE handler处理两次,而控制台因为root的STDOUT处理逻辑和子Logger的传递逻辑没有冲突,所以输出正常
修改com.company的配置,添加additivity: false来阻止日志向上传递:
loggers: com.company: level: DEBUG additivity: false
2. 检查是否存在重复的Handler配置
WildFly Swarm的默认日志配置中可能已经包含了一个文件handler,如果你自己又新增了FILE handler,就会导致两个handler同时输出日志到文件。可以尝试:
- 注释掉自己配置的
periodic-rotating-file-handlers块和root logger中的FILEhandler,使用默认的文件输出配置 - 或者确保你的配置完全覆盖了默认日志handler,避免重复注册
3. 启用日志调试模式追踪流程
添加JVM启动参数-Dorg.jboss.logging.debug=true,WildFly Swarm会输出日志框架的内部调试信息,你可以清晰看到每个日志条目被哪些handler处理,从而精准定位重复输出的根源。
4. 检查Logger的实际关联Handlers
通过JMX连接到WildFly Swarm实例,查看com.company logger实际关联的handlers列表,确认是否存在重复关联FILE handler的情况。如果该logger直接关联了FILE,同时root logger也关联了,就会触发重复输出。
内容的提问来源于stack exchange,提问作者jpstrube
相关产品推荐
相关产品推荐

