2010-12-14 5 views
23

Кажется, что у меня возникают некоторые проблемы при попытке реализовать вход в мой проект python.Файл конфигурации журнала регистрации Python

Я просто пытается имитировать следующую конфигурацию:

Python Logging to Multiple Destinations

Однако вместо того, чтобы делать это внутри кода, я хотел бы иметь его в файле конфигурации.

Ниже мой конфигурационный файл:

[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,) 

Проблема заключается в том, что мой вывод на экран выглядит следующим образом:
2010-12-14 11: 39: 04066 - корень - ПРЕДУПРЕЖДЕНИЕ - 3
2010-12 -14 11: 39: 04066 - корень - ERROR - 2010-12-14 11: 39: 04066 - корень - ВАЖНЫЙ - 5

Мой файл выводится, но выглядит так же, как и выше (хотя и с дополнительная информация включена). Однако уровни отладки и информации также не выводятся.

Я на Python 2.7

Вот мой простой пример, показывающий отказ:

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() 

ответ

16

Это похоже, вы установили уровни для ваших обработчиков, но не ваш регистратор. Уровень регистратора фильтрует каждое сообщение до того, как он достигнет своих обработчиков, а по умолчанию - WARNING и выше (как вы можете видеть). Настройка уровня корневого регистратора на NOTSET, как и у вас, а также настройка его на DEBUG (или любой другой уровень, который вы хотите зарегистрировать) должен решить вашу проблему.

11

, добавив следующую строку в корневой регистратор позаботился о моей проблеме:

level=NOTSET 
0
#!/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 

Я думаю, вы должны добавить disable_existing_loggers к false.

Смежные вопросы