
Monday April 04, 2005
¿ Bugcito en log4j ?
Yo, keko y muchos mas extendemos log4j para ampliarlo y adaptarlo a nuestras aplicaciones. En concreto, yo no utilizo el objeto Logger sino un objeto Log que extiende del mismo y facilita la gestion de push y pop del mismo entre otras muchas cosas.
Para poder utilizar tu propia clase extendida de Logger tienes que crear una clase que herede de LogFactory y, en concreto, sobreescribir el metodo makeNewLoggerInstance que devuelve un Logger para que devuelva una nueva instancia de tu objeto extendido. Despues, cuando quieres instanciar un objeto extendido de Logger, en vez de hacer el clasico Logger.getLogger(String) utilizas Logger.getLogger(String, LogFactory) donde LogFactory es tu factoria extendida.
Como veis, sencillo y elegante, sin embargo algo obscuro se esconde bajo la superficie ;).
Normalmente, cuando se instancia un log, se califica el mismo con el nombre de la clase en la que se instancia (Ej. Logger.getLogger("com.foo.Bar")) aunque se puede calificar "solo" con el nombre del paquete, o con lo que queramos ("pepino", "jarroncho", etc.).
Nosotros, ademas de extender log4j tenemos un pequeño "cache" de logs que guarda las distintas instancias de Logger por eso, solemos calificar por paquetes en vez de por clases, se crea una instancia por paquete en vez de por cada una de las clases que contienen. Y AQUI PUEDE APARECER EL PROBLEMA.
Si te instancias un objeto Logger, calificandolo con el mismo nombre de la categoria que has puesto en tu log4.properties, te sale una CascotazoDeLaMuerteException. Es decir, imaginemos que en nuestro log4j.properties tenemos una categoria tal que asi:
- log4j.logger.com.varma.util.database=DEBUG
Bien, cuando yo me instancio mi objeto que hereda de Logger (en mi caso Log) puedo hacer esto:
Log log = Log.getLog("com.varma.util.database.otropaquete");
o esto otro:
Log log = Log.getLog("com.varma.util.database.Miclase");
Pero como haga esto, la aplicacion se me muere;
Log log = Log.getLog("com.varma.util.database");
¿ Curioso ? ¿ Os ha pasado ?. La verdad es que me parece demasiado increible como para que sea cierto, seguiremos investigando.
(2005-04-04 13:22:17.0)
Permalink
URL de la referencia: http://weblogs.javahispano.org/dbonillaf/entry/bugcito_en_log4j
|
Muy buenas, estoy empezando con el log4j, y tengo un problema...
Todo va perfecto me crea las trazas en los log que le indico e incluso he conseguido que cada cierto tiempo, es decir cada dia, los renombre y asi obtener un log para cada dia, el problema viene cuando dos clases escriben en el fichero log a la vez y coincide con el tiempo de renombrar el log, es decir , pasar al dia siguiente.
Mi problrema es que hay dias que el log no se renombra y por tanto para eso dia no tengo log, y que no se lo que pasa con esas trazas si se pierden o en que log se guardaran.
Enviado por fernando en August 28, 2007 a las 09:36 AM EDT #
sagfds
Enviado por 200.126.177.131 en June 20, 2008 a las 09:48 PM EDT #
gfed
Enviado por 200.126.177.131 en June 20, 2008 a las 09:48 PM EDT #
www.gmlvl.com provides professional and fast leveling. We take many messures to guarantee customer's accounts. Up to now, we have thousands of customers.
Now new business is carried out--customer trade. And also your could get CDK at low price from us.
Im sure you will have a nice experience with our service. Looking forward to you!
Enviado por jana en September 19, 2008 a las 09:25 AM EDT #