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.