write values multiple logger log files example disable_existing_loggers python logging

values - python logging multiple files



Archivo de configuraciĆ³n de registro de Python (4)

Parece que tengo algunos problemas al intentar implementar el inicio de sesión en mi proyecto de python.

Simplemente estoy intentando imitar la siguiente configuración:

Python logging a múltiples destinos

Sin embargo, en lugar de hacer esto dentro del código, me gustaría tenerlo en un archivo de configuración.

A continuación se muestra mi archivo de configuración:

[loggers] keys=root [logger_root] handlers=screen,file [formatters] keys=simple,complex [formatter_simple] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s [formatter_complex] format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s [handlers] keys=file,screen [handler_file] class=handlers.TimedRotatingFileHandler interval=midnight backupCount=5 formatter=complex level=DEBUG args=(''logs/testSuite.log'',) [handler_screen] class=StreamHandler formatter=simple level=INFO args=(sys.stdout,)

El problema es que mi salida de pantalla se ve como:
2010-12-14 11: 39: 04,066 - raíz - ADVERTENCIA - 3
2010-12-14 11: 39: 04,066 - raíz - ERROR - 4
2010-12-14 11: 39: 04,066 - raíz - CRÍTICO - 5

Mi archivo se imprime, pero tiene el mismo aspecto que el anterior (aunque con la información adicional incluida). Sin embargo, los niveles de información y depuración no se muestran en ninguno de los dos

Estoy en Python 2.7

Aquí está mi ejemplo simple que muestra el fracaso:

import os import sys import logging import logging.config sys.path.append(os.path.realpath("shared/")) sys.path.append(os.path.realpath("tests/")) class Main(object): @staticmethod def main(): logging.config.fileConfig("logging.conf") logging.debug("1") logging.info("2") logging.warn("3") logging.error("4") logging.critical("5") if __name__ == "__main__": Main.main()


Agregar la siguiente línea al registrador raíz se hizo cargo de mi problema:

level=NOTSET


Parece que has establecido los niveles para tus manejadores, pero no para tu registrador. El nivel del registrador filtra cada mensaje antes de que pueda llegar a sus manejadores y el valor predeterminado es WARNING y superior (como puede ver). Configurar el nivel del registrador raíz en NOTSET como lo ha hecho, así como configurarlo en DEBUG (o cualquiera que sea el nivel más bajo que desee registrar) debería resolver su problema.


Solo agrega el nivel de registro en [logger_root] . Se trabaja

[logger_root] level=DEBUG handlers=screen,file


#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import logging.handlers from logging.config import dictConfig logger = logging.getLogger(__name__) DEFAULT_LOGGING = { ''version'': 1, ''disable_existing_loggers'': False, } def configure_logging(logfile_path): """ Initialize logging defaults for Project. :param logfile_path: logfile used to the logfile :type logfile_path: string This function does: - Assign INFO and DEBUG level to logger file handler and console handler """ dictConfig(DEFAULT_LOGGING) default_formatter = logging.Formatter( "[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s():%(lineno)s] [PID:%(process)d TID:%(thread)d] %(message)s", "%d/%m/%Y %H:%M:%S") file_handler = logging.handlers.RotatingFileHandler(logfile_path, maxBytes=10485760,backupCount=300, encoding=''utf-8'') file_handler.setLevel(logging.INFO) console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) file_handler.setFormatter(default_formatter) console_handler.setFormatter(default_formatter) logging.root.setLevel(logging.DEBUG) logging.root.addHandler(file_handler) logging.root.addHandler(console_handler) [31/10/2015 22:00:33] [DEBUG] [yourmodulename] [yourfunction_name():9] [PID:61314 TID:140735248744448] this is logger infomation from hello module

Creo que deberías agregar el disable_existing_loggers a falso.