Foro sobre Java EE > Logger vs LogFactory
Hola.
Al parecer el problema es la ubicacion del archivo log4j.properties
Ruta por defecto : Cuando estes en fase de desarrollo, el api del log4j buscara el log4j.properties en el classpath. Para ello pon lo en la raiz de la carpeta "src".
Te digo desarrollo ya que no es recomendable empaquetar este archivo log4j.properties dentro de tu aplicacion.
Para entornos de produccion podrias configurar una ruta en tu servidor y ahi ubicar este archivito. Luego, solo al inicio de tu aplicacion debes configurar esta nueva ruta. Basicamente es solo esto :
PropertyConfigurator.configure("log4j.properties")
Aqui unos ejemplos :
##### SPRING #####
https://gist.github.com/66aca2fe4a470d16cad9.git
Fuente:
http://www.simplethoughtsonline.com/2012/01/spring-configuration-initial-file.html
O algo mas rapido ( sin crear clase alguna )
https://gist.github.com/afbe8914539f03576fcc.git
Fuente
http://helpdesk.objects.com.au/java/how-to-specify-log4j-configuration-in-spring-application
##### NO SPRING #####
Aqui 2 ejemplos muy buenos (ServletContextListener)
http://www.codejava.net/coding/how-to-initialize-log4j-for-java-web-application
http://blog.idleworx.com/2010/01/setting-up-log4j-for-simple-java-web.html
##### DESKTOP O STANDALONE #####
public static void main(String args[]){
PropertyConfigurator.configure("log4j.properties");
}
Como veras en todos estos ejemplos, la configuracion de la ruta del archivo de propiedades solo es al inicio de la aplicacion y no en cada accion.
Finalmente para usar el log, solo esto, ninguna configuracion extra :)
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MiController
{
public static Logger logger = Logger.getLogger(MiController.class);
public void miMetodo()
{
logger.debug("iniciando metodo : miMetodo !!");
}
}
#######
Saludos
PD: Tuve que usar gits para los ejemplos ya que cuando pegue xml a este editor, se veian terribles T_T
Hola,
estoy manteniendo una aplicación que usa la librería "org.apache.log4j.Logger", y ocurre que no pinta ningún log (ni en fichero ni en consola) mientras no pasa por el siguiente código: (a partir de ahi ya escribe logs, incluso de las demás clases)
URL url = Loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);
LoginAction.TRAZA = Logger.getLogger(LoginAction.class);
(el caso es que "TRAZA" ya estaba definida en la clase como
"private static Logger TRAZA = Logger.getLogger(InicioFiltroBuscadorExpedientesAction.class.getName());")
Sin embargo, este problema no ocurre con la librería "org.apache.commons.logging.LogFactory", ya que escribe en los logs sin necesidad de ninguna línea de código adicional, aparte de definir la variable
"private static Log log = LogFactory.getFactory().getInstance(LoginAction.class);"
¿Alguien sabe a qué se debe esa diferencia?
Gracias