java - the - Uso de getSimpleName() vs getName() para adquirir el registrador
logger java (5)
He visto un código que usa log4j
, que adquiere el logger
para un logger
dado usando
static public Logger getLogger(String name)
y
static public Logger getLogger(Class clazz)
con el api anterior pasado explícitamente con getSimpleName()
, mientras que el último usa getName()
en la Class
pasada. ¿Hay alguna diferencia entre estos dos? ¿Afectaría si configuro varios paquetes para registrar a un nivel diferente en el archivo log4j.properties?
Podría confundirse si tiene muchas clases con el mismo nombre simpleName
en diferentes paquetes. Tener muchos registradores con el mismo nombre no debería ser un problema, de lo contrario, solo podría ser confuso.
Por ejemplo, mi clase ShapeDemo.java reside en el paquete com.test, y he escrito un código como el siguiente.
System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());
Esto saldrá después de
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
Prefiero usar el nombre completo (Class.getName ()). Cuando los paquetes están organizados correctamente, esto permite que log4j maneje los mensajes de registro que se originan en diferentes partes del árbol de paquetes java.
Por ejemplo, puede configurar fácilmente todas las clases en paquetes que comiencen con "com.mycompany.infra" para usar un appender específico, y registrar solo los mensajes de nivel WARN o superior.
Sí, hay una gran diferencia.
Nunca uso simpleName
para la instancia del simpleName
ya que simpleName
el nombre del paquete. Además de tener problemas cuando existe el mismo nombre de clase en dos paquetes diferentes (lo que lleva a que ambas clases obtengan la misma instancia de registrador), pierde la capacidad de controlar la herencia del registrador.
por ejemplo, para dos madereros:
com.foo.A
com.foo.B
En propiedades, solo puedo tener:
log4j.logger.com.foo=DEBUG,CONSOLE
Uso de this.getClass (). GetName ();
Devoluciones: alin.iwin.flickrbrowser.GetRawData
mientras tanto
privado String LOG_TAG = this.getClass (). getSimpleName ();
Solo se devuelve: GetRawData.