Pourquoi nous avons besoin de deux gestionnaires d'écriture dans la journalisation tomcat.propriétés?

à Partir de docs:

handlers = 1catalina.org.apache.juli.FileHandler, 
       2localhost.org.apache.juli.FileHandler, 
       3manager.org.apache.juli.FileHandler, 
       java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler, 
       java.util.logging.ConsoleHandler

Je n'ai pas trouvé d'explication pourquoi avoir besoin d'écrire handlers et after .les gestionnaires? Existe-il des règles communes pour des propriétés semblables fichiers? Grâce.

27
demandé sur user710818 2012-02-04 13:42:31

2 réponses

la première ligne déclare l'ensemble des gestionnaires qui peuvent/seront utilisés, la seconde assigne les gestionnaires au logger spécifique (dans ce cas root logger comme .handlers n'est pas préfixé par quoi que ce soit).

plus Tard dans logging.properties chaque gestionnaire est configuré.

26
répondu soulcheck 2012-02-04 10:29:47

Pour développer sur la réponse de soulcheck, ce que je n'ai pas compris au début...

handlers = ... la ligne peut être considérée comme une"déclaration variable".

handlers = 1catalina.org.apache.juli.FileHandler, \
       2localhost.org.apache.juli.FileHandler, \
       3manager.org.apache.juli.FileHandler, \
       java.util.logging.ConsoleHandler

"je déclare un enregistreur de nom 1catalina et tapez FileHandler, un enregistreur de nom 2localhost et tapez FileHandler.. un logger de type ConsoleHandler (ne pas nommer le dernier puisqu'il n'y en a qu'un, donc pas d'ambiguïté)."

d'autre part, le .handlers ligne serait un "affectation."

.handlers = 1catalina.org.apache.juli.FileHandler, 
       java.util.logging.ConsoleHandler

" - je attribuer le 1catalina & console gestionnaires à la racine de l'enregistreur. Ce qui signifie que toute journalisation effectuée dans l'application sera transmise à ces gestionnaires (sauf dérogation)"

..handlers renvoie à ce sur quoi vous appliquez cela. Dans ce cas, puisqu'il n'y a rien à gauche de la ., vous l'appliquez au logger racine, dont tous les loggers héritent.

Mais c'est exactement le même principe en action dans cette ligne:

com.mycompany.MyClass.handlers = java.util.logging.ConsoleHandler

dans ce cas, il y a quelque chose à gauche du . pour les .handlers et cela signifie que nous n'assignons pas ces gestionnaires à l'enregistreur racine mais à un enregistreur spécifique. Avec cette ligne, vous dites "Je réécrit la tâche logger->handler standard pour ce logger spécifique. Dans ce cas, n'agissez pas comme si vous vous basiez sur la configuration du logger racine. Dans ce cas, je veux que vous utilisez seulement le ConsoleHandler pour que l'exploitant".

Donc cela signifie que toute journalisation pour MyClass ne sera envoyé qu'à ConsoleHandler et non pas à un autre gestionnaire. Les autres classes ne sont pas affectées par cette ligne.

encore une fois, je ne fais que répéter l'explication de soulcheck, mais plus en détail, dont j'avais besoin pour comprendre la différence.

4
répondu Emmanuel Touzery 2018-05-30 10:00:19