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

Log4j报错咨询:category标签解析及同一appender复用可行性

解答你的Log4j配置疑问

先聊聊你遇到的报错:

2018-03-23 17:34:38,857 ERROR [stderr] (default task-8) log4j:ERROR Attempted to append to closed appender named [eproc-file-out]

先别急,咱们先把你问的两个核心问题解决掉:

1. 说说Log4j.xml里的<category>标签到底是干嘛的

<category>其实就是Log4j给咱们提供的日志精细化控制工具,简单说就是给不同包/类的日志单独定规矩:

  • name属性:指定要管控的Java包或者具体类的全路径(比如你配置里的com.presentation、org.apache),只要是这个路径下的类打日志,就会遵守这个category的规则。
  • <priority>:设置这个category的日志级别,比如DEBUG、ERROR,只有级别不低于这个值的日志才会被处理。
  • <appender-ref>:指定这个category的日志要输出到哪个预先定义好的appender(比如你的eproc-file-out文件输出器)。

举个例子,你给com.metaparadigm这个category设成ERROR级别,意思就是这个包下的类只有ERROR及以上级别的日志才会写到eproc-file-out里,DEBUG、INFO级别的直接过滤掉,非常灵活。

2. 所有<category>能不能都用同一个<appender-ref ref="eproc-file-out"/>?

当然可以!而且这是非常常规的操作,你自己的配置其实已经这么做了😂

这么配置的好处很多:

  • 不用重复写一堆一样的appender配置,减少冗余
  • 后续要改日志存储路径、输出格式或者滚动策略,只需要改eproc-file-out这一处就行,省心
  • 所有分类的日志都统一写到同一个文件里,方便后期排查问题时统一检索

至于你遇到的Attempted to append to closed appender报错,和多个category共用同一个appender没关系,大概率是这几个原因:

  • 代码里不小心手动调用了appender的关闭方法
  • JBoss容器重启或者类加载器回收时,appender的资源没释放干净,导致后续日志想写入的时候,文件句柄已经被关了
  • 日志文件的权限有问题,比如系统把文件锁了,导致appender被迫关闭

最后给你把配置格式化了一下,看起来更清晰:

<appender name="eproc-file-out" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="${jboss.server.log.dir}/eProcurement/eProcurementServerLog.log"/>
    <param name="Append" value="true"/>
    <param name="DatePattern" value="'.'dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
    </layout>
</appender>

<category name="com.presentation">
    <priority value="DEBUG"/>
    <appender-ref ref="eproc-file-out"/>
</category>
<category name="com.service">
    <priority value="DEBUG"/>
    <appender-ref ref="eproc-file-out"/>
</category>
<category name="com.dao">
    <priority value="DEBUG"/>
    <appender-ref ref="eproc-file-out"/>
</category>
<category name="org.apache">
    <priority value="DEBUG"/>
    <appender-ref ref="eproc-file-out"/>
</category>
<category name="org.springframework">
    <priority value="DEBUG"/>
    <appender-ref ref="eproc-file-out"/>
</category>
<category name="com.metaparadigm">
    <priority value="ERROR"/>
    <appender-ref ref="eproc-file-out"/>
</category>

<root level="debug">
    <appender-ref ref="eproc-file-out"/> <!-- 补全了你配置里的截断部分 -->
</root>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:11