7
votes

Pourquoi Log4J Rootlogger ne filtre pas les événements de journal en fonction du niveau d'événement?

Pourquoi le log4j rootlogger dans mon application ne filtrant pas le filtrage Événements de journalisation en fonction du niveau? Dans mon log4j.properties , j'ai plusieurs enregistreurs: xxx

chacun des enregistreurs reçoivent et enregistrez de nombreux événements de journal à des niveaux débogage et Ci-dessus, ce que j'attends et le désir. Le rootlogger , cependant, malgré la définition sur le niveau info , affiche également tous ces événements, y compris les événements débogage , qui n'est pas Ce que je m'attends et non ce que je désire. Au lieu de cela, je m'attendrais à ce qu'elle filtre les événements de débogage , mais affichez uniquement les événements au niveau info et supérieur ( avertir , et fatal ), ce qui est aussi ce que je veux. Pourquoi rootlogger affiche-t-il tous les événements?


5 commentaires

Vous avez fourni le niveau de débogage pour com.name.myapp, org.castor, org.hibernate, org.springframework, donc pour ces PKGS, il imprimera les informations de débogage?


Oui, ces niveaux impriment des événements de débogage. Cependant, la RootLogger imprime tous les événements, mais je veux imprimer des événements d'information.


puis changez le niveau en informations.


Le niveau de seuil d'enregistreur racine est déjà défini sur info . C'est mon point. L'enregistreur racine accepte également les événements de débogage. Pourquoi?


Comme je discute de ma réponse ci-dessous, Stackoverflow.com/Questtions/2453010/... explique pourquoi l'enregistreur racine capture les événements de tous les autres enregistreurs.


3 Réponses :


2
votes

Consultez l'héritage décrit dans le intro . Si vous spécifiez un niveau au niveau du package, il n'héritera pas le niveau de l'enregistreur racine. Vous utilisez le débogage dans les packages que vous spécifiez, pas d'informations. Spécification du niveau remplace tout ce qui a été hérité.

Si vous souhaitez hériter du niveau de l'enregistreur racine, supprimez-vous de la spécification de niveau dans vos configurations d'enregistrement.


2 commentaires

Je ne veux pas que les colis héritent du niveau de l'enregistreur racine. Je souhaite que l'enregistreur racine omet d'omettre les événements de débogage et d'afficher uniquement des informations et ci-dessus à la console.


@Derek Mahar Check Out Logging.apache.org/log4j /1.2/apidocs/org/apache/log4j/... . Utilisez% C pour voir ce que vos niveaux font vraiment. Vous devriez être capable de suivre ce qui se passe mieux de cette façon.



2
votes

Pour récupérer le rootlogger, utilisez-vous LOGGER.GETROOTLOGGER () ? Sinon, vous ne pouvez pas obtenir le véritable enregistreur racine. Si tel est le cas, assurez-vous que le seuil de stdout n'est pas au débogage; Le seuil des annexiers remplace celui des niveaux d'enregistrement.


3 commentaires

Quel est le niveau de priorité par défaut d'un appendeur? Est-ce tout ?


Désolé, je voulais dire seuil . La réponse que vous avez trouvée ci-dessous était correcte.


Votre réponse est sur la bonne voie, mais comme je le mentionne dans ma réponse ( Stackoverflow.com/questions/3023690/... ), une des deux solutions possibles était de Définissez le seuil de l'appender stdout à info .