Строка регистрации Python не форматируется - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать регистрацию 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

1 Ответ

0 голосов
/ 08 января 2019

Неважно, это была опечатка.

handler.setFormatter(fmt=format) 

должны были:

handler.setFormatter(fmt=formatter) 
...