2010-01-13 2 views
3

Actuellement, j'ai une bibliothèque qui enregistre certaines informations comme ERREUR. Si je change mes paramètres log4j comme ceci:Est-il possible de changer le niveau de consignation d'un paquet dans log4j?

log4j.logger.com.company.theirpackage.foo=OFF 

qui désactivera complètement la journalisation de la bibliothèque. Cependant, ce que j'aimerais vraiment, c'est voir les informations, mais les enregistrer au niveau WARN ou INFO. En d'autres termes, lorsque ce code particulier appelle log.error(), je veux que ce soit comme s'ils avaient appelé log.warn() ou log.info() à la place.

Existe-t-il un moyen de le faire avec log4j?

Répondre

2

Pas directement, mais vous pouvez écrire un appender personnalisé qui intercepte les appels, vérifie les niveaux, puis les imprime à quelque niveau que vous voulez. Ou, vous pourriez faire une programmation orientée aspect et intercepter/changer leurs appels.

Mais pourquoi voudriez-vous changer le niveau auquel ils se connectent?

+0

Notre service traite une erreur comme un événement vraiment mauvais, alors que cette bibliothèque de journaux toutes sortes de choses sans importance comme erreur. Je pourrais changer notre surveillance de notation pour ignorer des ERREURS de ce paquet, mais je préférerais que cette bibliothèque n'enregistre pas simplement des choses sans importance telles que des ERREURS. – Ross

+0

J'ai compris. Utilisez-vous des frameworks d'application comme Spring? Ils rendent le tissage d'aspect assez facile. –

1

Je pense que cela est possible, en mettant en œuvre un Filter, dans lequel le niveau à l'intérieur d'un LoggingEvent est modifié lorsqu'il correspond à certaines conditions.

+0

Pouvez-vous changer le niveau? Je ne pensais pas que tu pouvais. –

+0

Il n'existe pas de méthode setLevel(), mais vous pouvez utiliser la réflexion pour définir le champ directement. – Confusion

Questions connexes