El día 29 de octubre de 2013 10:26, Jose Caballero <jcaballero....@gmail.com> escribió: > Hola, > > probaré a usar self.log() como sugieres. > > La razón por la que lo hago en el logger root es porque la aplicación está > compuesta por varios módulos y plugins, incluyendo los que los usuarios > puedan escribir por su cuenta sin yo saberlo. Quiero que al hacer log = > getLogger("foo") al comienzo de cada módulo y cada plugin, el objeto log > contenga el método trace(). > Tu sugerencia es correcta, pero si alguien olvida usar la clase ad-hoc > MyLogger pierde la nueva funcionalidad. Creo. > O tal vez es que aún no entiendo bien las clases de log. Probaré tu > sugerencia en cualquier caso.
Prueba. "Multiple calls to getLogger() with the same name will always return a reference to the same Logger object." Se puede decir que los loggers funcionan como singletons siempre que los instancies desde getLogger. LLamando a setLoggerClass() al inicio, todas las instancias de Logger que se creen a partir de entonces llevarán el método trace. Así mismo, ésta la razón por la que hay que usar getLoggerClass() para obtener la clase a especializar (tal como hace mi código). > > Muchas gracias por la respuesta y los comentarios. > > Saludos, > Jose > > > On Oct 28, 2013, at 22:41, Chema Cortes <pych...@gmail.com> wrote: > >> El día 28 de octubre de 2013 21:37, Jose Caballero >> <jcaballero....@gmail.com> escribió: >>> Hola, >>> >>> >>> quiero agnadir un nivel de log por debajo de DEBUG, llamado TRACE. >>> Siguiendo cierta informacion que encontre en stackoverflow, lo que es >>> implementado es lo siguiente: >>> >>> >>> logging.TRACE = 5 >>> logging.addLevelName(logging.TRACE, 'TRACE') >>> def trace(self, msg, *args, **kwargs): >>> self._log(logging.TRACE, msg, args, **kwargs) >>> logging.Logger.trace = trace >> >> _log envía el mensaje al logger sin chequear los niveles. Usa >> Logger.log en su lugar: >> >> def trace(self, msg, *args, **kwargs): >> self.log(logging.TRACE, msg, *args, **kwargs) >> >> No veo clara la implementación que estás haciendo, con modificaciones >> tanto del módulo logging como de la clase Logger/RootLogger. Sin >> volver a la discursión de estos días sobre especializar o parchear >> clases, deberías derivar tu propia clase de Logger en vez de usar el >> logger root. Parcheando así podrías tener problemas con el >> multiproceso. >> >> import logging >> >> class MyLogger(logging.getLoggerClass()): >> >> TRACE = 5 >> logging.addLevelName(TRACE, "TRACE") >> >> def trace(self, msg, *args, **kwargs): >> self.log(self.TRACE, msg, *args, **kwargs) >> >> logging.setLoggerClass(MyLogger) >> >> logger = logging.getLogger(__name__) >> logger.addHandler(logging.StreamHandler()) >> >> logger.setLevel("TRACE") >> logger.trace("hi") >> >> logger.setLevel("INFO") >> logger.trace("hi") >> >>> >>> >>> y depues de eso ya hago lo normal >>> >>> log = logging.getLogger() >>> .... >>> >>> >>> El unico problema es que siempre ejecuta las llamadas a log.trace(), >>> independiente de el nivel de log. Por ejemplo, si hago log.setLevel >>> ( "INFO" ) responde a todos los mensajes de niveles INFO, WARNING, >>> ERROR y CRITICAL, pero tambien TRACE. >>> Se supone que TRACE solo deberia responder si el nivel es 5 o menos, no? >>> >>> Si alguien tiene una pista de porque no respeta el valor 5 y se >>> ejecuta siempre, cualquier comentario sera mas que bienvenido. >>> >>> >>> Muchas gracias por adelantado. >>> Jose >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >> >> >> >> -- >> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >> http://ch3m4.org/blog >> Buscador Python Hispano: http://ch3m4.org/python-es >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ -- Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": http://ch3m4.org/blog Buscador Python Hispano: http://ch3m4.org/python-es _______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/