Estoy usando Java 1.4 con Log4J.¿Debería declararse un registrador Log4J como transitorio?
Parte de mi código implica serializar y deserializar objetos de valor (POJO).
Cada uno de mis POJOs declara un registrador con
private final Logger log = Logger.getLogger(getClass());
El serializador se queja de org.apache.log4j.Logger no ser Serializable.
¿Debo usar
private final transient Logger log = Logger.getLogger(getClass());
en su lugar?
Un par de preguntas que podría hacerse y agregar como edición a su pregunta. ¿Cuál es su pensamiento a favor y en contra de hacerlo transitorio? ¿Qué significa transitorio? – svrist
Debería haber mencionado, me gusta la idea de tener un registrador para cada instancia en lugar de uno para cada clase. Tendría muchas instancias de la misma clase creadas y creadas por un contenedor (digamos un contexto de la aplicación Spring) y me gustaría cambiar los niveles de registro en base a cada poroto en lugar de por clase. En el ejemplo de un contexto de aplicación Spring, el registrador se declararía como algo similar a log transitorio final privado Logger = Logger.getLogger (getBeanName()); donde el bean ya no es un POJO e implementa BeanNameAware – Vihung
Ver también [las preguntas frecuentes de SLF4J] (http://www.slf4j.org/faq.html#declared_static): * "Deberían declararse los miembros de Logger de una clase como static? [...] En resumen, declarar a los miembros del registrador como variables estáticas requiere menos tiempo de CPU y una memoria ligeramente más pequeña. [...] Sin embargo, las variables de instancia hacen posible crear un entorno de registrador distinto para cada aplicación, incluso para los registradores declarados en bibliotecas compartidas. Tal vez más importantes que las consideraciones mencionadas anteriormente, las variables de instancia son IOC-friendly mientras que las variables estáticas no lo son. "* – Arjan