Pourquoi Logger.getLogger () de log4j doit-il passer un type de classe?

J’ai lu des articles sur l’utilisation de log4j. La plupart d’entre eux donnent le code ci-dessous comme un début:

Logger logger = Logger.getLogger("com.foo.Bar"); 

ou

  Logger logger = Logger.getLogger(XXX.class); 

Cela initialisera l’object logger. Mais ma question est la suivante: pourquoi faut-il envoyer le type de classe en paramètre? Il semble que lorsque j’utilise l’enregistreur, je ne me soucie pas de la classe que j’utilise. Le type de classe ne semble donc pas avoir d’effet sur l’enregistreur. Si je déclare un enregistreur statique et public, je peux appeler cet enregistreur dans un autre cours. Alors, quelle est l’intention de l’auteur de le concevoir comme ça? Le type de classe va-t-il lier quelque chose lorsque j’utilise l’enregistreur? Ou je peux envoyer n’importe quel type de classe à la fonction getLogger.

  1. Vous pouvez toujours utiliser n’importe quelle chaîne en tant que nom de journal autre que le type de classe. C’est définitivement ok

  2. La raison pour laquelle beaucoup de gens utilisent le type de classe, je suppose:

    • Facile à utiliser. Vous n’avez pas besoin de vous soucier de la duplication du nom de l’enregistreur dans une application Java EE complexe. Si d’autres personnes utilisent également votre nom de journal, vous pouvez avoir un fichier journal ne contenant pas uniquement le résultat de votre classe;

    • Facile à vérifier la classe de journalisation, comme le nom de logger affichera dans le fichier journal. Vous pouvez naviguer rapidement vers la classe spécifique;

    • Lorsque vous dissortingbuez votre classe, les utilisateurs peuvent vouloir redirect la journalisation de votre classe vers un fichier spécifique ou ailleurs. Dans un tel cas, si vous utilisez un nom de journal spécial, il se peut que nous devions vérifier le code source ou que cela ne soit pas possible si le fichier est indisponible.

Depuis javadoc : Logger.getLogger(Class) est un raccourci pour getLogger(clazz.getName()) . Une convention utilisée avec log4j et les autres structures de journalisation consiste à définir un enregistreur statique par classe. Par exemple,

 public class SomeClass { private static final Logger LOG = Logger.getLogger(SomeClass.class); ... } 

J’ai trouvé que cette convention fonctionnait bien pour organiser la sortie de journalisation. Ce n’est certainement pas obligatoire mais c’est une pratique utile.

1: vous pouvez utiliser “class name” ou “ssortingng name” lorsque vous définissez dans log4j.properties auparavant, par exemple

 log4j.logger.anything=INFO,anything 

donc, vous pouvez enregistrer votre journal comme

  Logger logger = Logger.getLogger("anything"); 

2: Si vous définissez un nom de journal, vous pouvez le vérifier facilement, cus ils sont séparés.

XXX.class consiste à nommer votre enregistreur, c’est-à-dire à signaler les instructions de journal suivantes. Pour vous donner une idée de la classe à laquelle appartiennent certaines instructions de journal.

L’enregistreur avec le nom de la classe n’est pas obligatoire, vous pouvez utiliser votre propre message. C’est convention d’utiliser:

 Logger logger = Logger.getLogger(XXX.class) 

et est utile pour déboguer. Il va enregistrer quelle ligne de code est exécutée.

Vous pouvez suivre votre journal par type de classe.

Exemple 1:

 public class Bar { Logger logger = Logger.getLogger("com.foo.Bar"); ... logger.debug("debug message"); } 

Peut-être que vous pouvez voir ci-dessous un message de journal.

 DEBUG: **com.foo.Bar** debug message 

exemple2:

 public class Foo { Logger logger = Logger.getLogger("com.foo.Foo"); ... logger.debug("debug message"); } 

Peut-être que vous pouvez voir ci-dessous un message de journal.

 DEBUG: **com.foo.Foo** debug message 

Si vous avez beaucoup de classe Java et de message de journal, il est trop difficile de trouver d’où proviennent les messages de journal.