Saltar al contenido

LoggerFactory.getLogger(ClassName.class) vs LoggerFactory.getLogger(this.getClass().getName())

Contamos con tu apoyo para difundir nuestros artículos referente a las ciencias de la computación.

Solución:

Aquí compartiré mi opinión. Diría que este es el caso de que no debería molestarse desde el punto de vista del rendimiento. Probablemente en el código hay partes que se pueden optimizar mucho más que esto 🙂

Ahora, con respecto a tu pregunta. Eche un vistazo al código de LoggerFactory

Tenga en cuenta que getLogger(Class name) simplemente llama al método sobrecargado:

Logger logger = getLogger(clazz.getName());

Y hace algunos cálculos adicionales. Entonces, el método con String es obviamente un poco más rápido.

En general, el patrón es mantener la referencia del registrador como un static campo en la clase, algo como esto:

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

En este caso, realmente no puedes usar this.getClass() porque this en realidad no existe (estás corriendo en un static contexto).

Desde mi experiencia es mejor usar el ClassName.getClass() como parámetro a menos que realmente quiera usar el mismo registrador de diferentes clases. En tal caso, es mejor que utilice alguna constante lógica que indique el registrador.

Por ejemplo, digamos que está tratando de usar 3 clases diferentes para acceder a la base de datos. Así que crea el registrador ‘DB’, asigna un agregador de archivos que escribirá en base de datos. registro y desea reutilizar el mismo registrador entre estas 3 clases diferentes.

Así que deberías usar el siguiente código:

public class SomeClass 
   private static final Logger LOG =   LoggerFactory.getLogger("DB");

Espero que esto ayude

¡Entrada tardía!

Como es probable que esté buscando esto en el futuro.

Hay una manera de crear instancias de Logger fáciles de copiar y pegar (¡concedido que esto casi nunca es una buena razón para hacer algo!) mediante el uso de la clase MethodHandles de Java 7.

private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

Lo que suelo hacer es

private static final Logger logger = LoggerFactory.getLogger(ClassName.class);

Sin embargo, el modismo

protected final Logger log = LoggerFactory.getLogger(getClass());

es igualmente común. En esta pregunta puede encontrar más información sobre estas convenciones.

Si te ha resultado de ayuda nuestro post, nos gustaría que lo compartas con otros entusiastas de la programación y nos ayudes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *