web-dev-qa-db-fra.com

log4j: WARN Aucun ajout de correcteur n'a pu être trouvé pour l'enregistreur dans web.xml

J'ai déjà mis le log4jConfigLocation dans web.xml, mais je reçois toujours l'avertissement suivant:

log4j:WARN No appenders could be found for logger ⤦
    ⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

Qu'est-ce que j'ai raté?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "Java.Sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>suara2</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>suara2</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
76
cometta

Si c'est tout le fichier log4j.properties, il semble que vous ne créez jamais de journal. Vous avez besoin d'une ligne comme:

log4j.rootLogger=debug,A1
42
CodeGoat

J'avais log4j.properties au bon endroit dans le classpath et j'ai quand même eu cet avertissement avec tout ce qui l'utilisait directement. Le code utilisant log4j via commons-logging semblait convenir pour une raison quelconque.

Si tu as:

log4j.rootLogger=WARN

Changez le en:

log4j.rootLogger=WARN, console
log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

Selon http://logging.Apache.org/log4j/1.2/manual.html

Le consignateur racine est anonyme, mais il est possible d'y accéder avec la méthode Logger.getRootLogger (). Il n'y a pas d'appender par défaut attaché à root.

Cela signifie que vous devez spécifier un appender, un appender quelconque, au logger racine pour que la journalisation se produise.

Si vous ajoutez cet appender console à rootLogger, la plainte disparaît.

27
Alain O'Dea

Vous pouvez obtenir cette erreur lorsque vos log4j.properties ne sont pas présents dans le chemin d'accès aux classes. 

Cela signifie que vous devez déplacer le log4j.properties dans le dossier src et définir la sortie dans le dossier bin afin qu'au moment de l'exécution, log4j.properties lise depuis le dossier bin et que votre erreur soit résolue facilement.

17
prabhat

Vous verrez cet avertissement si log4j ne peut trouver aucun fichier "log4j.properties" ou "log4j.xml" n'importe où.

7
Aaron Digulla

Ou bien, vous pourriez faire ce que j'ai fait et définir le consignateur avant que le fichier de configuration du journal ait été chargé. Ce serait comme on dit: "Mettre la charrue avant les bœufs."

Dans le code:

public static Logger logger = Logger.getLogger("RbReport");

...plus tard 

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");

Le correctif consistait à initialiser le consignateur une fois la configuration chargée.

Pour les geeks, c’était "Putting Descarte b4 d cheval".

7
MikeF

Si vous souhaitez configurer des applications log4j autonomes, vous pouvez utiliser le BasicConfigurator. Cette solution ne sera pas bonne pour les applications Web telles que l’environnement Spring. 

Vous devez écrire

BasicConfigurator.configure();

ou

ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);
5
GARIMA KILLEDAR

Si cela vous aide toujours, vérifiez le nom de l'archive, il doit s'agir de "log4j.properties" ou "log4j.xml" (sensible à la casse), et suivez les conseils de "Alain O'Dea" erreur, mais après avoir effectué ces modifications, tout fonctionne correctement . comme un charme: -) . espérons que cela aide.

4
Marcelo Daniel

Dans mon cas, la solution était facile. Vous n'avez rien à déclarer dans votre web.xml.

Comme votre projet est une application Web, le fichier de configuration doit être sur WEB-INF/classes après le déploiement. Je vous conseille de créer un dossier de ressources Java (src/main/resources) pour le faire (meilleure pratique). Une autre approche consiste à placer le fichier de configuration dans votre src/main/Java.

Faites attention avec le nom du fichier de configuration. Si vous utilisez XML, le nom du fichier est log4j.xml, sinon log4j.properties.

3
jbatista

Mettez ces lignes au début de web.xml 

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

   <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:/main/resources/log4j.xml</param-value>
   </context-param>

Voir ce lien pour plus de détails: http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

2
MariemJab

Ajoutez log4jExposeWebAppRoot -> false dans votre web.xml. Ça marche avec moi :)

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>path/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
1
Innet

OK, je vois beaucoup de réponses et certaines très correctes. Cependant, aucun n'a résolu mon problème. Le problème dans mon cas était que les autorisations du système de fichiers UNIX avaient le fichier log4j.properties que je modifiais sur le serveur et appartenant à root. et lisible uniquement par root. Cependant, l'application Web que je déployais était destinée à Tomcat. Impossible de lire le fichier car Tomcat s'exécute en tant qu'utilisateur Tomcat sur les systèmes Linux par défaut. J'espère que cela t'aides. la solution tapait donc 'chown Tomcat: tomcat log4j.properties' dans le répertoire où réside le fichier log4j.properties.

1
M The Developer

J'ai eu le même problème . Même configuration et même message d'avertissement. Ce qui a fonctionné pour moi a été: Changer l'ordre des entrées.  

  • Je mets les entrées pour la configuration du journal [le paramètre de contexte et L'écouteur] en haut du fichier [avant l'entrée pour le ApplicationContext.xml] et cela fonctionna.

L'Ordre compte, je suppose. 

0
Roshan Khandelwal