2010-04-16 3 views
24

Je souhaite implémenter un enregistreur personnalisé qui enregistre toutes les entrées de journal dans une base de données. Actuellement mon application logs de cette façon (reliure slf4j et log4j):Implémenter un enregistreur personnalisé avec slf4j

private static final Logger logger = LoggerFactory.getLogger(MyClass.class); 

Je ne sais pas comment procéder. Mon idée consiste à implémenter une liaison de journalisation personnalisée en implémentant le org.slf4j.Logger Interface

Quelles seraient les prochaines étapes? Mon objectif est de ne pas changer le code actuel

Liens Je considérais:

+0

Logback (http://logback.qos.ch) - L'implémentation SLF4J native peut se connecter à la base de données. –

+0

@ Michał Mech, * native *? –

+0

@Bruno Reis, Oui. Logback implémente nativement l'API SLF4J. –

Répondre

25

il devrait être assez facile. vous devrez implémenter votre propre Logger et LoggerFactory. vous n'aurez pas à modifier le code existant du tout. Après avoir fait cela, vous devrez implémenter StaticLoggerBinder pour retourner votre fabrique de loggers et votre nom de classe. Si vous téléchargez le fichier zip slf4j, vous obtenez également la source pour toutes les implémentations, regardez par exemple le StaticLoggerBinder dans slf4j-log4j.

un regard sur ce lien pour plus de détails: http://www.slf4j.org/faq.html#slf4j_compatible

+0

Merci oedo! Est-il également possible d'utiliser log4j dans ma structure de consignation, par ex. écrire uniquement des erreurs et des avertissements dans la base de données et utiliser log4j pour le reste? Le problème est que j'ai 2 liaisons que http://www.slf4j.org/codes.html#multiple_bindings –

+0

au moment où il semble que l'appender log4j personnalisé est ce que je cherche donc avertir l'erreur et le niveau d'alerte va à mon appender personnalisé tandis que le reste reste à elle est (configuré dans log4j.xml) –

+0

sûr, je suppose que vous pourriez écrire votre enregistreur personnalisé afin qu'il transmet les demandes pertinentes à log4j. encore une fois, jetez un oeil à la source pour slf4j-log4j pour vous aider à démarrer :) – oedo

4

Vous ne devez pas écrire votre propre implémentation de journalisation, comment sur le passage du cadre de l'exploitation forestière à logback? Loback prend en charge la journalisation dans la base de données nativement. Comme vous utilisez l'API SLF4J à la fois, votre code ne changera pas.

Jetez un oeil à la ch.qos.logback.classic.db.DBAppender. Si la disposition par défaut de la table ne correspond pas à vos besoins, vous pouvez implémenter ch.qos.logback.classic.db.names.DBNameResolver pour personnaliser les noms des tables et des colonnes.

Questions connexes