log4j: ОШИБКА Попытка добавить к закрытому аппендиату с именем [..] - PullRequest
24 голосов
/ 23 ноября 2011

Я постоянно получаю следующие ошибки на своей консоли

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>

, пожалуйста, помогите мне, где проблема.

Ответы [ 6 ]

25 голосов
/ 05 ноября 2012

Я получил ту же ошибку:

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>

Я удалилдубликат, это сработало.

23 голосов
/ 02 апреля 2012

Я ответил на аналогичный вопрос здесь: https://stackoverflow.com/a/9973283/340290

В моем случае у меня есть два свойства log4j.property, доступные для Log4J: один путем помещения его в classpath, а другой - программной загрузки(используя PropertyConfigurator.configure(..)).

И в этих двух файлах я ConsoleAppender зарегистрировался с тем же именем stdout и дважды использовал одну и ту же категорию (по одному на каждый файл свойств).Удаление конфигурации или файла свойств решило мою проблему.

7 голосов
/ 30 января 2013

Можно перезаписать конфигурацию, используя:

BasicConfigurator.resetConfiguration();
PropertyConfigurator.configure(props);
0 голосов
/ 20 января 2014

Это также может означать, что ваш сервер уже запущен, и вы пытаетесь запустить его снова.Второй экземпляр не может записать в файл журнала, потому что он уже открыт на вашем сервере.

решение: проверьте, работает ли ваш сервер, и перезапустите его, если необходимо.

0 голосов
/ 20 декабря 2012

Просто чтобы уточнить, потому что я был введен в заблуждение ответом MaDa, additivity = false перенаправляет вывод в другое место, чем по умолчанию (root logger), а НЕ в значение по умолчанию. См. http://logging.apache.org/log4j/1.2/manual.html главу «Дополнения и макеты»

0 голосов
/ 23 ноября 2011

Я не говорю, что это причина поведения, которое вы описываете (но оно может ), но эта часть:

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

бессмысленно. Обычно вы устанавливаете неаддитивный логгер так, чтобы он перенаправлял его куда-то еще , чем место по умолчанию (ваш корневой логгер), но вы все равно отправляете вывод в место по умолчанию. Вы также можете удалить этот фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...