El día 29 de octubre de 2013 16:54, Jose Caballero <jcaballero....@gmail.com> escribió: > Hola de nuevo, > > acabo de probar tus sugerencias. > > 1. using self.log() en lugar de self._log() parece funcionar bien > > 2. usando la clase MyLogger() funciona, siempre y cuando en el core > de la aplicacion no se llame nunca al logger root, que es el caso > actual.
No veo cuál es el problema. El root logger estándar no tiene método 'trace' y ponerle uno te va a dar problemas de uso en multihilo. ¿No sería mejor que quien quiera usar trace lo haga con instancias de tu clase TraceLogger? Igual te sería más práctico usar una "currificación" y dejar el root logger sin tocar: logging.trace = functools.partial(logging.log, logging.TRACE) > > > Muchas gracias por todo, > Jose > > > > El día 28 de octubre de 2013 22:41, Chema Cortes <pych...@gmail.com> escribió: >> 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/