Después de leer el documentation on logging
, sé que puedo usar un código como éste para llevar a cabo el registro sencillo:¿Cómo cambio el formato de un mensaje de registro de Python por registrador?
import logging
def main():
logging.basicConfig(filename="messages.log",
level=logging.WARNING,
format='%(filename)s: '
'%(levelname)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(message)s')
logging.debug("Only for debug purposes\n")
logging.shutdown()
main()
Sin embargo, me di cuenta de que no sé cómo cambiar el formato de los mensajes de registro en una base por-logger , ya que basicConfig
es una función de nivel de módulo. Este código funciona para crear diferentes registradores con diferentes niveles, nombres, etc. pero, ¿hay alguna manera de cambiar el formato de esos mensajes de registro también por registrador, de una manera similar a basicConfig
?
import inspect
import logging
def function_logger(level=logging.DEBUG):
function_name = inspect.stack()[1][3]
logger = logging.getLogger(function_name)
logger.setLevel(level)
logger.addHandler(logging.FileHandler("{0}.log".format(function_name)))
return logger
def f1():
f1_logger = function_logger()
f1_logger.debug("f1 Debug message")
f1_logger.warning("f1 Warning message")
f1_logger.critical("f1 Critical message")
def f2():
f2_logger = function_logger(logging.WARNING)
f2_logger.debug("f2 Debug message")
f2_logger.warning("f2 Warning message")
f2_logger.critical("f2 Critical message")
def main():
f1()
f2()
logging.shutdown()
main()
1, +1 y otra vez (por desgracia no) para añadir el código. Lo edité en mi [respuesta anterior] (http://stackoverflow.com/a/11581118/869912) a una pregunta de registro también, y funciona perfectamente. –
Siempre me sorprende que no sea tan simple como 'logger = logging.getLogger ('mylogger') logger.basicConfig (level = ..., format = ...)' ... – theartofrain
¡Funciona muy bien! ¡Gracias! – Eli