Я пытаюсь использовать регистрацию 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
Однако не имеет значения, каким образом следуют сценарии (root, пользовательский StreamHandler или Filehandler), независимо от того, какой журнал я пытаюсь вывести, это вывод, который я получаю в консоли / файле:
%(asctime)s %(levelname)-8s %(name)s [%(filename)s:%(lineno)d - %(funcName)2s()] %(message)s