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

如何在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.log
  • MY_REST通过过滤器只保留INFO及以下级别,写入rest.log

重启JBoss服务器后,配置即可生效,实现按级别分流日志的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:15:34