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

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中的FILE handler,使用默认的文件输出配置
  • 或者确保你的配置完全覆盖了默认日志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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:39:30