如何为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>
关键修正说明
- 根日志器级别调整:把根日志器的
level从DEBUG改成WARN,完全贴合你「其余日志级别为WARN」的需求,未自定义的日志分类会自动继承这个级别,配合CONSOLE处理器的WARN级别,只会输出WARN及以上的日志。 - 日志器与处理器级别匹配:确保自定义日志器的级别和关联处理器的级别一致,比如
my.especial.project.category日志器设为DEBUG,对应的处理器也设为DEBUG,这样所有DEBUG及以上的日志都会被正常捕获输出。 - 保留
use-parent-handlers="false":这个设置是正确的,避免自定义分类的日志同时被根处理器输出,造成重复日志的问题。
额外排查步骤
- 确认代码中使用的日志分类名称和配置里的
category完全一致(注意大小写、点分隔符的拼写); - 修改配置后务必重启Wildfly服务器,日志配置的新增/修改通常需要重启才能完全生效;
- 如果还是没输出,可以临时把自定义处理器的级别改成
TRACE,测试是否有日志输出,排除级别过滤的问题。
内容的提问来源于stack exchange,提问作者Yoshimit




