如何在WildFly的standalone.xml中实现同类别日志分级别输出至不同文件
问题分析与解决方案
你的配置失效核心问题在于重复定义同类别Logger和错误的Level设置方式,导致日志分流逻辑冲突:
- 同一
com.myapplication类别定义了两个Logger,JBoss会优先匹配后一个,直接忽略第一个Logger的规则 - Logger标签下不能同时设置多个
<level>标签,这种写法无效,系统只会识别最后一个或直接忽略
以下是修正后的完整配置方案:
1. 保留Handler基础配置(无需修改)
你的两个文件Handler本身配置没问题,只需确保PATTERN格式化器已在配置中定义:
<periodic-rotating-file-handler name="MY_WARN_ERROR" autoflush="true"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="warn_error.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> </periodic-rotating-file-handler> <periodic-rotating-file-handler name="MY_REST" autoflush="true"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="rest.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> </periodic-rotating-file-handler>
2. 给Handler添加级别过滤(核心修正)
给每个Handler添加过滤规则,明确各自接收的日志级别:
<periodic-rotating-file-handler name="MY_WARN_ERROR" autoflush="true"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="warn_error.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> <!-- 仅保留WARN和ERROR级别日志 --> <filter> <level-range min-level="WARN" max-level="ERROR"/> </filter> </periodic-rotating-file-handler> <periodic-rotating-file-handler name="MY_REST" autoflush="true"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="rest.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> <!-- 仅保留INFO及以下级别日志(排除WARN、ERROR) --> <filter> <level-range max-level="INFO"/> </filter> </periodic-rotating-file-handler>
3. 修正Logger配置
只保留一个com.myapplication的Logger,设置级别为ALL并关联两个Handler,关闭父Handler继承:
<logger category="com.myapplication" use-parent-handlers="false"> <level name="ALL"/> <handlers> <handler name="MY_WARN_ERROR"/> <handler name="MY_REST"/> </handlers> </logger>
生效逻辑
所有com.myapplication的日志会被该Logger捕获(级别设为ALL确保不遗漏),随后同时发送到两个Handler:
MY_WARN_ERROR通过过滤器只保留WARN/ERROR级别,写入warn_error.logMY_REST通过过滤器只保留INFO及以下级别,写入rest.log
重启JBoss服务器后,配置即可生效,实现按级别分流日志的需求。
内容的提问来源于stack exchange,提问作者lsa
相关产品推荐
相关产品推荐

