web-dev-qa-db-fra.com

Filtrer les messages log4j des frameworks tiers?

Comment filtrer les messages de journal des infrastructures tierces externes? J'utilise Hibernate et Spring Framework et je voudrais supprimer les journaux afin que seuls mes journaux log4j apparaissent.

31
walters

Dans mon fichier log4j.properties, j'ai défini le niveau de journalisation de l'enregistreur racine sur ERROR. Ensuite, pour les packages que je souhaite spécifiquement enregistrer, comme mon code d'application, j'ai défini le niveau de journalisation sur INFO ou DEBUG.

log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO

Je vois des collègues qui mettent la journalisation racine à un niveau bas et qui finissent par lister tout ce qu'ils ne veulent pas voir, cela me semble juste en arrière. Je préférerais lister ce que je veux enregistrer que toutes les choses que je ne veux pas enregistrer.

BTW désactiver complètement la déconnexion pour un composant tiers me semble être une mauvaise idée. Par exemple, Spring est relativement bruyant et utilise WARN pour des choses que je n'ai vraiment pas besoin de savoir, mais s'il enregistre une entrée ERROR pour quelque chose, je veux le voir.

34
Nathan Hughes

Vous pouvez le faire en modifiant le niveau de journalisation dans le fichier log4j.properties/log4j.xml.

Vous devez définir le <level value="off"/> si vous souhaitez filtrer les journaux du package mais conserver la configuration de l'enregistreur pour une utilisation ultérieure. Vous pouvez également le définir sur le niveau le plus élevé pour ne journaliser qu'en cas d'erreur ou de problème fatal.

Les entrées suivantes doivent être ajoutées à log4j.xml pour désactiver la journalisation des packages hibernate et springframework:

<logger name="org.springframework">
    <level value="off"/>
</logger>
<logger name="org.hibernate">
    <level value="off"/>
</logger>
14
YoK

Dans log4j.properties, vous pouvez définir des niveaux individuels par enregistreur:

log4j.logger.<name>=FATAL

Dans log4j.xml, la syntaxe est

<logger name="<name>">
  <level value="fatal"/> 
</logger>

<nom> est souvent le nom complet de la classe. Vous voudrez peut-être utiliser WARN ou ERROR au lieu de FATAL

3
Hendrik Brummermann

N'ajoutez simplement pas ces packages dans votre log4j.properties. Par exemple, vous devez avoir ceci pour Spring dans votre fichier de propriétés. Retirez-le si vous avez des entrées comme ci-dessous (tout ce qui commence par org.springframework). La même chose doit être faite pour la mise en veille prolongée.

#Logs the SQL from Spring
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=ERROR
#Logs the SQL parameters from Spring
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=ERROR

De plus, comme cela a été mentionné, vous devez également définir les paramètres suivants. J'ai oublié de mentionner ceci.

log4j.rootLogger=FATAL  
or   
log4j.rootLogger=ERROR  
2
CoolBeans