You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为Wildfly 9配置与根日志器不同级别的日志分类?

Wildfly 9.0.2 自定义日志分类级别配置问题解决

我来帮你搞定这个日志配置的问题,你的思路方向是对的,但有几个关键细节没调整到位,导致自定义分类的日志没法正常输出。咱们一步步来修正:

问题根源分析

你的配置里有个逻辑矛盾点:你希望其余日志级别为WARN,但根日志器的级别却设成了DEBUG,虽然根处理器CONSOLE的级别是WARN能过滤掉低级别日志,但自定义日志器的输出问题主要在于——你需要确保「日志器级别」和「关联处理器级别」完全匹配,同时根日志器的级别要贴合你的全局需求。

修正后的完整配置

<subsystem xmlns="urn:jboss:domain:logging:3.0">
    <!-- 全局通用处理器:仅处理WARN及以上级别的日志 -->
    <console-handler name="CONSOLE">
        <level name="WARN"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>

    <!-- 自定义处理器:处理my.project.category的INFO及以上日志 -->
    <console-handler name="MY_INFO_HANDLER">
        <level name="INFO"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>

    <!-- 自定义处理器:处理my.especial.project.category的DEBUG及以上日志 -->
    <console-handler name="MY_DEBUGGER_HANDLER">
        <level name="DEBUG"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>

    <!-- my.project.category专属日志器:不继承根处理器,仅用自定义处理器 -->
    <logger category="my.project.category" use-parent-handlers="false">
        <level name="INFO"/>
        <handlers>
            <handler name="MY_INFO_HANDLER"/>
        </handlers>
    </logger>

    <!-- my.especial.project.category专属日志器:不继承根处理器,仅用自定义处理器 -->
    <logger category="my.especial.project.category" use-parent-handlers="false">
        <level name="DEBUG"/>
        <handlers>
            <handler name="MY_DEBUGGER_HANDLER"/>
        </handlers>
    </logger>

    <!-- 根日志器:全局默认级别设为WARN,关联通用处理器 -->
    <root-logger>
        <level name="WARN"/>
        <handlers>
            <handler name="CONSOLE"/>
        </handlers>
    </root-logger>

    <formatter name="PATTERN">
        <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
    <formatter name="COLOR-PATTERN">
        <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
</subsystem>

关键修正说明

  1. 根日志器级别调整:把根日志器的levelDEBUG改成WARN,完全贴合你「其余日志级别为WARN」的需求,未自定义的日志分类会自动继承这个级别,配合CONSOLE处理器的WARN级别,只会输出WARN及以上的日志。
  2. 日志器与处理器级别匹配:确保自定义日志器的级别和关联处理器的级别一致,比如my.especial.project.category日志器设为DEBUG,对应的处理器也设为DEBUG,这样所有DEBUG及以上的日志都会被正常捕获输出。
  3. 保留use-parent-handlers="false":这个设置是正确的,避免自定义分类的日志同时被根处理器输出,造成重复日志的问题。

额外排查步骤

  • 确认代码中使用的日志分类名称和配置里的category完全一致(注意大小写、点分隔符的拼写);
  • 修改配置后务必重启Wildfly服务器,日志配置的新增/修改通常需要重启才能完全生效;
  • 如果还是没输出,可以临时把自定义处理器的级别改成TRACE,测试是否有日志输出,排除级别过滤的问题。

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

火山引擎 最新活动