2010-06-16 4 views
0

J'utilise log4j dans mon projet et je voulais utiliser FallbackErrorHandler pour les raisons de sauvegarde. Donc, quand je veux implémenter un FallbackErrorHandler, vous devez utiliser le DOMConfigurator et cela pour un fichier XML-Configuration. Mais maintenant, mon client n'aime pas vraiment le XML et cherche un moyen, il peut configurer le comportement Logging lui-même, j'ai eu l'idée de charger la configuration de base à l'aide des propriétés java et d'instancier le plus haut Appender ou ErrorHandler avec Java-Code, que je pourrais configurer avec des paramètres.Log4j: Configuration de FallbackErrorHandler avec les propriétés

La configuration de l'ErrorHandler a fonctionné jusqu'à présent, le log4j-debug montrant toutes les choses correctes, mais j'ai rencontré un problème que je n'ai pas pu résoudre jusqu'à présent. Mon FallbackErrorHandler commence à se connecter au backupAppender déjà au début du programme, pas quand un appender standard a échoué. Je ne pouvais pas comprendre ce que j'avais fait de mal, je peux poster le code des propriétés et le code Java si quelqu'un veut le regarder, mais au début, je voulais demander, si quelqu'un a rencontré le même problème ou a des expériences avec la configuration de log4j dans Java?

+0

@rdogpink: Vous devez suivre les questions et réponses format du site et déplacer la solution jusqu'à une réponse appropriée. Cela vous permettra d'accepter votre propre réponse. –

+0

Je suis désolé, je suppose que j'ai simplement supervisé le bouton en première instance, et quand j'ai fini d'écrire, il n'y avait pas. Je vais le corriger! – user357206

Répondre

1

Après des semaines d'essais, j'ai enfin trouvé une solution. L'événement clé était la découverte, que PropertyConfigurator a également une classe pour ErrorHandler, bien que Geki ait écrit, qu'il n'y a aucune possibilité de configurer un ErrorHandler avec le PropertyConfigurator. Alors j'ai continué à essayer.

Maintenant, je pouvais simplement combiner la déclaration de base dans log4j.properties avec la liaison de Logger, Appender et ErrorHandler dans JavaCode. Ainsi ci-dessous dans mes propriétés des stands:

log4j.appender.ServerAppender=org.apache.log4j.FileAppender 
log4j.appender.ServerAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.ServerAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %F - %m%n 
log4j.appender.ServerAppender.file=logs/ServerLog.txt 
log4j.appender.ServerAppender.threshold=DEBUG 

log4j.logger.com.foo.server=TRACE, ServerAppender 

log4j.appender.ServerAppender.errorhandler=org.apache.log4j.varia.FallbackErrorHandler 
log4j.appender.ServerAppender.errorhandler.logger-ref=com.foo.server 
log4j.appender.ServerAppender.errorhandler.appender-ref=FallbackServerAppender 

log4j.appender.FallbackServerAppender=org.apache.log4j.FileAppender 
log4j.appender.FallbackServerAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.FallbackServerAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %F - %m%n 
log4j.appender.FallbackServerAppender.file=C:/Temp/Test/fallbackServerLog.txt 

log4j.logger.com.foo.error=DEBUG,FallbackServerAppender 

Alors que com.foo.server est une partie de ma hiérarchie de package, com.foo.error est seulement un espace réservé, donc je peux l'appeler au sein de Java-Code. Cela ressemblera à ceci.

PropertyConfigurator.configure(LOG4JCONFIG); 
FallbackErrorHandler fbeh=(FallbackErrorHandler)LogManager.getLogger("com.foo.server").getAppender("ServerAppender").getErrorHandler(); 
fbeh.setLogger(LogManager.getLogger("com.foo.server")); 
fbeh.setAppender(LogManager.getLogger("com.foo.server").getAppender("ServerAppender"));   
fbeh.setBackupAppender(LogManager.getLogger("com.foo.error").getAppender("FallbackServerAppender")); 

Un problème connu, la fallbackErrorHandler remise à zéro lorsque le Appender Indifférent Fume est à nouveau, pourrait être résolu en redémarrant le configure() - méthode ou après les situations où normalement la Appender normale -CAN'T journal.

espère qu'il pourra aider quelqu'un :)

Questions connexes