我正在尝试使用python日志记录为每个类创建一个记录器。
本质问题是我的输出如果根本不进行格式化,它只会打印出格式字符串。
这是我用来创建记录器的脚本:
def obtener_logger_experimental(nombre, file=None, root=False, format=None, level=logging.DEBUG):
if not isinstance(nombre, str):
raise TypeError("El nombre del logger debe de ser un string")
if format is None:
# format = '%(levelname)s: %(asctime)-15s %(name)s\t%(message)s'
# format = '%(asctime)-15s %(message)s'
format = "%(asctime)s %(levelname)-8s %(name)s [%(filename)s:%(lineno)d - %(funcName)2s()]\t%(message)s"
else:
if not isinstance(format, str):
raise TypeError("El format del logger debe de ser un string")
formatter = logging.Formatter(fmt=format)
logging.basicConfig(level=level, format=format)
if root:
logger = logging.getLogger(nombre)
else:
logger = logging.Logger(name=nombre, level=level)
logger.setLevel(level)
handler_root = False
if root:
if hasattr(logger, 'root'):
if hasattr(logger.root, 'handlers'):
for handler in logger.root.handlers:
# Ñapa, pero funciona.
handler.setFormatter(formatter)
handler.setLevel(level)
handler_root = True
else:
# No sé si esto funciona.
logger.propagate = False
if file is not None:
try:
if not verificar_permiso_escritura(fichero=file, soloficheros=True):
raise FileExistsError("El fichero de log no existe o no hay permisos para crearlo / editarlo: " + file)
except Exception as e:
raise FileExistsError("Error verificando los permisos del fichero " + file + " Excepcion: " + str(e))
handler = logging.handlers.TimedRotatingFileHandler(filename=file, when="midnight", interval=1, backupCount=30)
handler.setLevel(level)
#Error was here
#handler.setFormatter(fmt=format)
handler.setFormatter(fmt=formatter)
logger.addHandler(handler)
else:
# Si queremos loggear a stdout y no hemos encontrado el handler root (o no lo queremos) crear un handler propio.
if not handler_root:
handler = logging.StreamHandler()
handler.setLevel(level)
# Error was here
# handler.setFormatter(fmt=format)
handler.setFormatter(fmt=formatter)
logger.addHandler(handler)
return logger
但是,脚本遵循的方式(根目录,自定义StreamHandler或Filehandler)无关紧要,无论我尝试输出哪个日志,这都是我在控制台/文件中得到的输出:
%(asctime)s %(levelname)-8s %(name)s [%(filename)s:%(lineno)d - %(funcName)2s()] %(message)s
答案 0 :(得分:0)
没关系,这是一个错字。
handler.setFormatter(fmt=format)
应该已经:
handler.setFormatter(fmt=formatter)