web-dev-qa-db-fra.com

log4j: ERROR a tenté d’ajouter à l’appender fermé nommé [..]

Je reçois à plusieurs reprises des erreurs sur ma console

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

utilisé 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>

aidez-moi s'il vous plaît où le problème.

24
Sameek Mishra

J'ai répondu à une question similaire ici: https://stackoverflow.com/a/9973283/340290

Dans mon cas, le Log4J dispose de deux propriétés log4j.properties: l’une en le plaçant dans classpath et l’autre en cours de chargement par programme (à l’aide de PropertyConfigurator.configure(..)).

Et dans les deux fichiers, j'ai enregistré ConsoleAppender avec le même nom stdout et utilisé deux fois pour la même catégorie (un par fichier de propriétés). La suppression de config ou du fichier de propriétés a résolu mon problème.

23
manikanta

J'ai eu la même erreur:

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

Dans mon log4j.xml

J'ai deux enregistreurs avec le même nom comme ci-dessous

<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>

J'ai enlevé le duplicata, cela a fonctionné.

24
satti

On pourrait écraser la configuration en utilisant: 

BasicConfigurator.resetConfiguration();
PropertyConfigurator.configure(props);
7
Mykhaylo Adamovych

Pour préciser, parce que MaDa m'a induit en erreur, additivity = false redirige la sortie vers un emplacement autre que celui par défaut (enregistreur racine) et NON vers celui par défaut . Voir http://logging.Apache.org/log4j /1.2/manual.html chapitre "Annexes et présentations"

0
bilbo notry

Je ne dis pas que c'est la cause du comportement que vous décrivez (mais c'est peut-être), mais cette partie:

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

est inutile. Normalement, vous définissez un enregistreur non additif pour le rediriger ailleurs que l'emplacement par défaut (votre enregistreur racine), mais vous envoyez toujours la sortie à l'emplacement par défaut. Vous pourriez aussi bien supprimer ce fragment.

0
MaDa

Cela peut également signifier que votre serveur est déjà en cours d'exécution et que vous essayez de le réexécuter. La deuxième instance ne peut pas écrire dans le fichier journal car il est déjà ouvert sur votre serveur.

solution: vérifiez si votre serveur est déjà en cours d'exécution et redémarrez-le si nécessaire.

0
Brad Parks