Pourquoi le log4j chacun des enregistreurs reçoivent et enregistrez de nombreux événements de journal à des niveaux rootlogger code> dans mon application ne filtrant pas le filtrage Événements de journalisation en fonction du niveau? Dans mon
log4j.properties code>, j'ai plusieurs enregistreurs:
débogage code> et Ci-dessus, ce que j'attends et le désir. Le
rootlogger code>, cependant, malgré la définition sur le niveau
info code>, affiche également tous ces événements, y compris les événements
débogage code>, 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 code> de débogage code>, mais affichez uniquement les événements au niveau
info code> et supérieur (
avertir code>,
code> et
fatal code>), ce qui est aussi ce que je veux. Pourquoi rootlogger affiche-t-il tous les événements? P> P>
3 Réponses :
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é. P>
Si vous souhaitez hériter du niveau de l'enregistreur racine, supprimez-vous de la spécification de niveau dans vos configurations d'enregistrement. P>
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.
Pour récupérer le rootlogger, utilisez-vous LOGGER.GETROOTLOGGER () code>? Sinon, vous ne pouvez pas obtenir le véritable enregistreur racine. Si tel est le cas, assurez-vous que le seuil de
stdout code> n'est pas au débogage; Le seuil des annexiers remplace celui des niveaux d'enregistrement. P>
Quel est le niveau de priorité par défaut d'un appendeur? Est-ce tout code>?
Désolé, je voulais dire seuil code>. 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 code> à
info code>.
Voir ce Réponse à une similaire Question A> À propos de l'enregistreur enchaînant dans log4j: La façon dont log4j chaînings fonctionne est un peu
contre-intuitif (pour moi au moins). Si
Le niveau de la demande est égal ou supérieur à
le seuil du plus spécifique
Enregistreur correspondant, il est accepté. Une fois
La demande est acceptée, elle obtient
géré par la chaîne complète de
ancêtres indépendamment de leur
seuils! p>
blockQuote> Cela signifie que peu importe à quel niveau vous définissez le seuil de l'enregistreur racine, il acceptera toujours et émis l'événement de journal que tout autre enregistreur accepte, sauf si vous désactivez la chaînage pour cet enregistreur enfant ou défini explicitement. Le seuil de son appendeur à un niveau supérieur. p> Donc, dans ce cas, il est possible que vous puissiez empêcher l'enregistreur racine de capturer les événements des autres enregistreurs. Le premier est l'approche la plus sélective de la chaîne d'événements de journalisation désactivée: p> La deuxième manière est plus simple, mais plus restrictive car elle supprime tous les événements sur la console inférieure à celle de la console inférieure à celle de Code> info code> (
débogage code> et
trace code>): p>
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 code>. 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.