2010-01-15 9 views
1

Les documents Java pour Logger indiquent que le nom du consignateur doit être basé sur le nom de la classe. Google gère Guice dans ce BinderImpl.java où il effectue les opérations suivantes:Adhérer à la norme de journalisation tout en utilisant Google Guice?

return member == null 
     ? Logger.getAnonymousLogger() 
     : Logger.getLogger(member.getDeclaringClass().getName()); 

Cependant, comme il est d'obtenir un nouvel enregistreur pour chaque classe, je perdrais l'accès à tout Handler's ont pu être ajoutés à mon enregistreur.

Quelle est la meilleure façon de gérer à la fois l'utilisation du nom de classe dans l'enregistreur et l'application d'un ensemble standard de gestionnaires?

Répondre

4

La solution n'a en fait rien à voir avec Guice, mais est plutôt basée sur la façon dont les classes de journalisation fonctionnent en Java.

Bûcherons sont créés dans une hiérarchie, donc, enregistreur x.y.z est un enfant de x.y, tout le chemin jusqu'à la chaîne de l'enregistreur racine dont le nom est la chaîne vide . Chaque enregistreur hérite des propriétés, comme son niveau de consignation, de son parent.

Ainsi, afin de définir le niveau globalement (ou pour les gestionnaires dans le monde) journal, les mettre simplement sur l'enregistreur racine:

LogManager logManager = LogManager.getLogManager(); 
Logger rootLogger = logManager.getLogger(""); 
rootLogger.setLevel(Level.FINEST); 
rootLogger.addHandler(new ConsoleHandler()); 

Une fois cela fait, les bûcherons injectés auront leurs propriétés dérivées de l'enregistreur de racine et tous les enregistreurs parents qui peuvent exister. Pour plus d'informations sur les bases, voir le LogManager documentation.

Une propriété config existe également. Selon la documentation de LogManager:

Une propriété "config". Cette propriété est destinée à permettre l'exécution arbitraire du code de configuration . La propriété définit un espace ou une virgule liste séparée des noms de classe. Une nouvelle instance sera créée pour chaque classe nommée . Le constructeur par défaut de chaque classe peut exécuter du code arbitraire de mettre à jour la configuration journalisation , comme enregistreur réglage niveaux, l'ajout de gestionnaires, en ajoutant filtres, etc.

Cela implique qu'il existe plusieurs solutions à la problème que j'aurais pu aussi utiliser une classe de configuration.