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.
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é.
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.