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
Это также может означать, что у вас уже есть ваш сервер, и вы пытаетесь запустить его снова. Второй экземпляр не может записывать в файл журнала, поскольку он уже открыт на вашем сервере.
Решение: проверьте, запущен ли ваш сервер и перезагрузите его, если это необходимо.