【问题标题】:log4j:ERROR Attempted to append to closed appender named [..]log4j:错误尝试附加到名为 [..] 的已关闭附加程序
【发布时间】:2011-11-23 13:39:42
【问题描述】:

我的控制台反复出现以下错误

log4j:ERROR Attempted to append to closed appender named [ConsoleAppender].
log4j:ERROR Attempted to append to closed appender named [FixedWindowRollingFile].

使用 log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender class="org.apache.log4j.rolling.RollingFileAppender" name="FixedWindowRollingFile">
        <param name="Append" value="true"/>
        <param name="ImmediateFlush" value="true"/>

        <rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy">
            <param name="fileNamePattern" value="logs/StandardizeAccountService.%i.log"/>
            <param name="minIndex" value="1"/>
            <param name="maxIndex" value="10"/>
        </rollingPolicy>
        <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
            <param name="MaxFileSize" value="1002400"/>
        </triggeringPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p %c{1}:%L - %m%n"/>
        </layout>
    </appender>

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.SimpleLayout"/>
    </appender>

    <logger name="com.arosys" additivity="false" >
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="FixedWindowRollingFile"/>
    </logger>

    <root>
        <priority value="INFO"/>
        <appender-ref ref="ConsoleAppender"/>
        <appender-ref ref="FixedWindowRollingFile"/>
    </root>
</log4j:configuration>

请帮我解决问题。

【问题讨论】:

  • 我遇到了同样的问题。我的解决方案是将 JSTL 1.0 升级到 1.2

标签: log4j


【解决方案1】:

我遇到了同样的错误:

log4j:ERROR Attempted to append to closed appender named [rollingFileAppender].

在我的 log4j.xml 中

我有两个同名的记录器,如下所示

<logger name="java.sql.PreparedStatement" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="rollingFileAppender"/>
</logger>

 <logger name="java.sql.PreparedStatement">
    <level value="INFO"/>
    <appender-ref ref="rollingFileAppender"/>
</logger>

我删除了副本,它起作用了。

【讨论】:

  • 我马虎了!错过了这个!谢谢,至少八年后!
【解决方案2】:

我在这里回答了类似的问题:https://stackoverflow.com/a/9973283/340290

就我而言,我有两个可用于 Log4J 的 log4j.properties:一个通过将其放置在类路径中,另一个通过编程方式加载(使用 PropertyConfigurator.configure(..))。

在这两个文件中,我用同名 stdout 注册了 ConsoleAppender 并用于同一类别两次(每个属性文件一个)。删除配置或属性文件解决了我的问题。

【讨论】:

  • 我看不出这如何解决这里提出的原始问题,因为它们没有多个文件,也没有定义多个同名的附加程序。
  • 我遇到了同样的问题,我的应用程序中有一个 log4j,tomcat/lib 中有另一个。感谢您的回答!
【解决方案3】:

可以覆盖配置使用:

BasicConfigurator.resetConfiguration();
PropertyConfigurator.configure(props);

【讨论】:

  • 将此标记为“我的”正确解决方案,因为我的问题是我有几个潜在的应用程序入口点,并且很难将其重构为具有单个入口点。我得到了相同的“尝试附加到关闭的附加程序”错误,但原因不同。在每次重新配置之前恢复 Log4J 配置对我有用:-D 谢谢!
【解决方案4】:

只是为了澄清,因为我被 MaDa 的回答误导了,additivity=false 将输出重定向到默认值(根记录器)之外的另一个位置,而不是默认值。 见http://logging.apache.org/log4j/1.2/manual.html章节“Appenders and Layouts”

【讨论】:

    【解决方案5】:

    这也可能意味着您的服务器已经在运行,并且您正在尝试再次运行它。第二个实例无法写入日志文件,因为它已在您的服务器中打开。

    解决方案:检查您的服务器是否已经在运行,如果需要,请重新启动它。

    【讨论】:

      【解决方案6】:

      我并不是说这是您描述的行为的原因(但它可能),而是这部分:

      <logger name="com.arosys" additivity="false" >
         <level value="INFO" />
         <appender-ref ref="ConsoleAppender" />
         <appender-ref ref="FixedWindowRollingFile"/>
      </logger>
      

      毫无意义。通常,您会设置一个非附加记录器以将其重定向到其他地方而不是默认位置(您的根记录器),但您仍然会将输出发送到默认位置。你不妨删除这个片段。

      【讨论】:

        【解决方案7】:

        就我而言,我错误地添加了 2 个“根”元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-12
          • 2017-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多