Veuillez initialiser le système log4j correctement. Pendant l’exécution du service Web

Peut-être que ça a l’air idiot de demander ça mais je suis confus. J’ai fait référence à la configuration de la propriété Log4j mais cela ne semble pas aider.

J’ai écrit un simple service web HelloWorld. Et en cours d’exécution je reçois l’erreur quelque chose comme ceci:

log4j: WARN Aucun auteur n’a été trouvé pour logger (org.apache.axis.transport.http.AxisServlet). log4j: WARN Veuillez initialiser correctement le système log4j.

Je ne sais pas pourquoi cela se produit.

Je génère le service Web à l’aide d’Eclipse et déployé dans Tomcat 6.0. Je vérifie sur Axis Developer’s Guide et selon eux

log4j.configuration = log4j.properties Utilisez cette propriété système pour spécifier le nom d’un fichier de configuration Log4J. S’il n’est pas spécifié, le fichier de configuration par défaut est log4j.properties. Un fichier log4j.properties est fourni dans axis.jar.

Je n’ai pas trouvé log4j.properties dans axis.jar .

Une aide à ce sujet?

    Ces messages sont quelque chose de délicat, suffisamment pour que les gens l’aient créé pour que ce soit plus clair: https://issues.apache.org/bugzilla/show_bug.cgi?id=25747

    Ce qui leur pose problème, c’est que les avertissements sont écrits si Log4j ne peut pas trouver son log4j.properties (ou log4j.xml ), mais également si le fichier est log4j.xml et dandy mais que son contenu n’est pas complet du sharepoint vue de la configuration.

    Le paragraphe suivant est tiré d’ici: http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html

    La sortie de journalisation est écrite dans une cible à l’aide d’un appender. Si aucun auteur n’est associé à une catégorie ni à aucun de ses ancêtres, vous obtiendrez le message suivant lorsque vous tenterez de vous connecter:

     log4j: No appenders could be found for category (some.category.name). log4j: Please initialize the log4j system properly. 

    Log4j n’a pas de cible de journalisation par défaut. Il incombe à l’utilisateur de s’assurer que toutes les catégories peuvent hériter d’un appender. Cela peut être facilement réalisé en attachant un appender à la catégorie racine.

    Vous pouvez trouver des informations sur la configuration du logger racine ( log4j.rootLogger ) dans la documentation de log4j, en ajoutant simplement quelque chose d’aussi simple que cela au début du fichier:

     log4j.rootLogger=debug, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

    Cela devrait effacer les messages WARN que vous recevez au démarrage (assurez-vous de ne pas déjà avoir un appender nommé stdout ; soyez également attentif au niveau que vous donnez au logger racine, le debug sera très détaillé et toutes les bibliothèques de votre application commenceront à écrire. choses à la console).

    En ce qui concerne log4j.properties / log4j.xml , je vous suggère de placer ce fichier dans /WEB-INF/classes car il est important de l’exposer pour différents réglages (activation / désactivation des journaux, modification des niveaux de journalisation, etc.). Vous pouvez également l’avoir dans un fichier JAR du classpath (comme vous l’avez spécifié dans votre commentaire), mais il sera inclus dans l’archive (à la bonne place dans l’archive) et ne sera pas aussi facile à gérer que s’il étaient dans /WEB-INF/classes .

    Vous devez créer votre propre log4j.properties dans le dossier classpath.

    Eh bien, si vous aviez déjà créé le fichier log4j.properties, vous appendiez son chemin d’access au chemin de classe afin qu’il soit trouvé lors de l’exécution.
    Oui, le truc va rechercher ce fichier dans le classpath.
    Puisque vous avez dit que vous aviez regardé dans l’axe et que vous n’en aviez pas trouvé, je suppose que vous n’avez pas de log4j.properties, alors voici un exemple brutal mais complet.
    Créez-le quelque part et ajoutez-le à votre classpath. Par exemple, dans c: /proj/resources/log4j.properties

    Dans votre classpath, vous ajoutez simplement …….; c: / proj / resources

     # Root logger option log4j.rootLogger=DEBUG, stdout, file # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Redirect log messages to a log file, support file rolling. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

    Avertissement Aucun ajout introuvable pour le journal signifie que vous utilisez le système de journalisation log4j , mais vous n’avez ajouté aucun appendice (tel que FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) dans votre fichier de configuration ou le fichier de configuration est manquant. .

    Vous pouvez configurer log4j de trois manières: avec un fichier de propriétés ( log4j.properties ), avec un fichier XML et via du code Java ( rootLogger.addAppender(new NullAppender()); ).

    Si vous avez un fichier de propriétés (par exemple lors de l’installation de Solr), vous devez placer ce fichier dans votre répertoire classpath .

    chemin de classe

    Voici quelques suggestions de commandes pour déterminer votre valeur de chemin de classe:

     $ echo $CLASSPATH $ ps wuax | grep -i classpath $ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf 

    ou de Java: System.getProperty("java.class.path") .

    Matou

    Si vous utilisez Tomcat, vous pouvez placer votre log4j.properties dans le log4j.properties : /usr/share/tomcat?/lib/ ou /var/lib/tomcat?/webapps/*/WEB-INF/lib/ .

    Solr

    Pour la référence, Solr log4j.properties ressemble à:

     # Logging level solr.log=logs/ log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n #- size rotation with log cleanup. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=4MB log4j.appender.file.MaxBackupIndex=9 #- File to log to and log format log4j.appender.file.File=${solr.log}/solr.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n log4j.logger.org.apache.zookeeper=WARN log4j.logger.org.apache.hadoop=WARN # set to INFO to enable infostream log messages log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF 

    Si l’état ci-dessous est présent dans votre classe, votre fichier log4j.properties doit se trouver dans le dossier source java (src). S’il est exécutable, il doit être emballé dans un fichier jar et non dans un fichier séparé.

     static Logger log = Logger.getLogger(MyClass.class); 

    Merci,