web-dev-qa-db-fra.com

Comment modifier le niveau de journalisation d'un package à l'aide de Log4j?

J'ai rencontré le bogue suivant:

http://issues.Apache.org/jira/browse/AXIS2-436

Il déclare ce qui suit:

Cette erreur se produit uniquement lorsque le niveau de journalisation pour org.Apache.axiom est DEBUG, une solution de contournement consiste donc à définir le niveau de journalisation> DEBUG.

Ma question est: COMMENT dois-je procéder? J'ai parcouru mes répertoires pour trouver un fichier de propriétés ou quelque chose et j'ai cherché à voir s'il y avait quelque chose que je pouvais définir dans le code, mais je n'ai vraiment aucune idée de ce que je fais. J'exécute une application console sur mon bureau en ce moment tout en essayant de faire fonctionner cela.

Mise à jour 1: j'ai remarqué que mon répertoire Axis2 avait son propre fichier log4j.properties à sa racine. Est-ce ignoré en toute sécurité ou fait-il partie de la solution (ou partie du problème)?

Mise à jour 2: le fichier de niveau racine log4j.properties n'est apparemment pas correctement défini. À l'heure actuelle, cela ressemble à ceci:

log4j.rootLogger=DEBUG, R 
log4j.logger.org.Apache.axiom=WARN
log4j.appender.R=org.Apache.log4j.RollingFileAppender 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.Apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

mais c'est apparemment faux car ce code retourne "Le niveau du journal est nul":

System.out.println("Log level is " + logger.getLevel());

Pour l'instant, je configure le niveau de journal dans le code en utilisant

Logger logger = Logger.getLogger("org.Apache.axiom");
logger.setLevel(Level.WARN);
56
Ryan Elkins

Quel serveur d'application utilisez-vous? Chacun place sa configuration de journalisation dans un endroit différent, bien que la plupart utilisent de nos jours Commons-Logging comme enveloppe autour de Log4J ou Java.util.logging.

En utilisant Tomcat comme exemple, ce document explique vos options pour configurer la journalisation en utilisant l'une ou l'autre option. Dans les deux cas, vous devez rechercher ou créer un fichier de configuration qui définit le niveau de journal pour chaque package et chaque emplacement où le système de journalisation affichera les informations de journal (généralement la console, le fichier ou la base de données).

Dans le cas de log4j, ce serait le fichier log4j.properties, et si vous suivez les instructions dans le lien ci-dessus, votre fichier commencera à ressembler à:

log4j.rootLogger=DEBUG, R 
log4j.appender.R=org.Apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.home}/logs/Tomcat.log 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.Apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Le plus simple serait de changer la ligne:

log4j.rootLogger=DEBUG, R

Pour quelque chose comme:

log4j.rootLogger=WARN, R

Mais si vous voulez toujours votre propre sortie de niveau DEBUG de vos propres classes, ajoutez une ligne qui dit:

log4j.category.com.mypackage=DEBUG

Lire un peu sur Log4J et Commons-Logging vous aidera à comprendre tout cela.

59
Benjamin Cox

J'ai rencontré exactement le même problème aujourd'hui, Ryan.

Dans mon répertoire src (ou votre racine), mon fichier log4j.properties a maintenant l'ajout suivant

# https://issues.Apache.org/jira/browse/AXIS2-4363
log4j.category.org.Apache.axiom=WARN

Merci pour la façon de procéder, Benjamin.

9
ian_scho

Ce travail pour mon:

log4j.logger.org.hibernate.type=trace

Vous pouvez également essayer:

log4j.category.org.hibernate.type=trace
3
msangel

Je viens de rencontrer le problème et je n'ai pas pu comprendre ce qui n'allait pas, même après avoir lu tout ce qui précède et tout ce qui existe. Ce que j'ai fait

  1. Définissez le niveau de l'enregistreur racine sur WARN
  2. Définissez le niveau de journal du package sur DEBUG

Chaque implémentation de journalisation a sa propre façon de la définir via les propriétés ou via le code (beaucoup d'aide disponible à ce sujet)

Indépendamment de tout ce qui précède, je ne recevrais pas les journaux dans ma console ou mon fichier journal. Ce que j'avais oublié était le dessous ...


enter image description here


Tout ce que je faisais avec la jonglerie ci-dessus contrôlait uniquement la production des journaux (à la racine/package/classe, etc.), à gauche de la ligne rouge dans l'image ci-dessus. Mais je ne changeais pas la façon dont l'affichage/la consommation des journaux de la même, à droite de la ligne rouge dans l'image ci-dessus. Le gestionnaire (consommation) est généralement par défaut à INFO, donc vos précieuses instructions de débogage ne passeraient pas. La consommation/affichage est contrôlé en définissant les niveaux de journalisation pour les gestionnaires (ConsoleHandler/FileHandler etc.). J'ai donc continué et défini les niveaux de journalisation de tous mes gestionnaires au mieux et tout a fonctionné.

Ce point n'a été précisé de manière précise en aucun endroit.

J'espère que quelqu'un se grattant la tête, pensant pourquoi les propriétés ne fonctionnent pas, trouvera ce morceau utile.

2
kaza

définissez la propriété système log4j.debug = true. Ensuite, vous pouvez déterminer où votre configuration s'exécute.

0
James Armstrong