sirve que para logger getlogger java log4j

que - logger java 8



¿Por qué log4j''s Logger.getLogger() necesita pasar un tipo de clase? (6)

  1. Siempre puede usar cualquier cadena como nombre de registrador que no sea el tipo de clase. Definitivamente está bien.

  2. La razón por la que muchas personas usan el tipo de clase, supongo:

    • Fácil de usar. No debe preocuparse por la duplicación de nombres de registradores en una aplicación compleja de Java EE. Si otras personas también usan el nombre de su registrador, es posible que tenga un archivo de registro que incluya no solo la salida de su clase;

    • Es fácil comprobar la clase de registro, ya que el nombre del registrador se mostrará en el archivo de registro. Puede navegar rápidamente a la clase específica;

    • Cuando distribuyes tu clase, es posible que las personas deseen redirigir el registro de tu clase a un archivo específico o a otro lugar. En tal caso, si utiliza un nombre de registrador especial, es posible que debamos verificar el código fuente o no es posible hacerlo si la fuente no está disponible.

Leí algunos artículos sobre cómo usar log4j. La mayoría de ellos dan el código de abajo como un comienzo:

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

o

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

Esto inicializará el objeto del registrador. Pero mi pregunta es ¿por qué debo enviar el tipo de clase como parámetro? Parece que cuando uso el registrador, no me importa en qué clase lo uso. Por lo tanto, el tipo de clase no parece afectar al registrador. Si declaro un registrador como estático y público, puedo llamar a este registrador en otra clase. Entonces, ¿cuál es la intención del autor de diseñarlo de esta manera? ¿Se unirá el tipo de clase cuando use el registrador? O puedo enviar cualquier tipo de clase a la función getLogger.


1: puede usar "nombre de clase" o "nombre de cadena" cuando define en log4j.properties antes, como

log4j.logger.anything=INFO,anything

así, puedes grabar tu log como

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

2: Si define algún nombre de registro, puede verificarlo fácilmente, ya que están separados.


Desde el javadoc : Logger.getLogger(Class) es una forma abreviada de getLogger(clazz.getName()) . Una convención utilizada con log4j y otros marcos de registro es definir un registrador estático por clase. Por ejemplo,

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

He encontrado que esta convención funciona bien para organizar la salida del registro. Ciertamente no es obligatorio pero es una práctica útil.


El registrador con nombre de clase no es obligatorio, puede usar su propio mensaje. Es convención utilizar:

Logger logger = Logger.getLogger(XXX.class)

y es útil para depurar. Se registrará qué línea de código se ejecuta.


Puede rastrear su registro por tipo de clase.

Ejemplo 1:

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

Tal vez usted puede ver a continuación un mensaje de registro.

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

ejemplo2:

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

Tal vez usted puede ver a continuación un mensaje de registro.

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

Si tiene muchos mensajes de registrador y clase java, es muy difícil encontrar de dónde provienen los mensajes de registro.


XXX.class es para asignar un nombre a su registrador, es decir, para marcar las declaraciones de registro posteriores. Para darle una idea de a qué clase pertenecen ciertas instrucciones de registro / originadas.