web-dev-qa-db-fra.com

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

Peut-être que cela semble idiot de demander cela, mais je suis confus. J'ai fait référence à Configuration de la propriété Log4j mais cela ne semble pas aider.

J'ai écrit un simple service Web HelloWorld. Et tout en l'exécutant, j'obtiens l'erreur quelque chose comme ceci:

log4j: AVERTISSEMENT Aucun appender n'a été trouvé pour l'enregistreur (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 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 le axis.jar.

Une aide à ce sujet?

22
java_enthu

Ces messages sont quelque chose de délicat, suffisamment pour que les gens le créent pour le rendre plus clair: https://issues.Apache.org/bugzilla/show_bug.cgi?id=25747

Ce qui est délicat, c'est que les avertissements sont écrits si Log4j ne trouve pas son log4j.properties (ou log4j.xml), mais aussi si le fichier est fin et dandy mais que son contenu n'est pas complet du point de 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 sur une cible à l'aide d'un appender. Si aucun ajout n'est attaché à une catégorie ni à aucun de ses ancêtres, vous obtiendrez le message suivant lorsque vous essayez 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 est de la responsabilité de l'utilisateur de s'assurer que toutes les catégories peuvent hériter d'un appender. Ceci peut être facilement réalisé en attachant un appender à la catégorie racine.

Vous pouvez trouver des informations sur la configuration de l'enregistreur racine (log4j.rootLogger) dans le log4j documentation , ajoutant 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 obtenez au démarrage (assurez-vous que vous n'avez pas déjà un appender nommé stdout; faites également attention du niveau que vous donnez à l'enregistreur racine, debug sera très détaillé et chaque bibliothèque de votre application commencera à écrire des choses sur la console).

En ce qui concerne le 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 journaux, etc.). Vous pouvez également l'avoir dans un JAR dans le chemin de classe (comme vous l'avez spécifié dans votre commentaire), mais il sera inclus dans l'archive (si tout va bien au bon endroit dans l'archive) et ne sera pas aussi facile à manipuler que s'il étaient en /WEB-INF/classes.

40
user159088

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

5
flash

Eh bien, si vous aviez déjà créé le log4j.properties, vous ajouteriez son chemin au chemin de classe afin qu'il soit trouvé lors de l'exécution.
Oui, le machin recherchera ce fichier dans le chemin de classe.
.
Créez-le quelque part et ajoutez-le à votre chemin de classe. Mettez-le par exemple, dans c: /proj/resources/log4j.properties

Dans votre chemin de classe, 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
2
AlexD

Si la déclaration ci-dessous est présente dans votre classe, votre log4j.properties doit se trouver dans le dossier Java source (src), s'il s'agit d'un exécutable jar, il doit être compressé dans jar et non dans un fichier séparé.

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

Merci,

1
Kannan

Avertissement Aucun appender n'a été trouvé pour l'enregistreur signifie que vous utilisez log4j système d'enregistrement, mais vous n'avez ajouté aucun Appender (tel que FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) dans votre fichier de configuration ou le fichier de configuration est manquant.

Il existe trois façons de configurer log4j: avec un fichier de propriétés (log4j.properties), Avec un fichier XML et via Java code (rootLogger.addAppender(new NullAppender());).

Si un fichier de propriétés est présent (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 la valeur de votre chemin de classe:

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

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

Matou

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

Solr

Pour 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
0
kenorb