log4j: ОШИБКА Попытка добавить к закрытому appender с именем [..]

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

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>

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

Ответ 1

Я ответил на аналогичный вопрос: fooobar.com/questions/755749/...

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

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

Ответ 2

У меня такая же ошибка:

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>

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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