Файл конфигурации регистрации Python - PullRequest
30 голосов
/ 14 декабря 2010

Кажется, у меня возникают некоторые проблемы при попытке входа в мой проект python.

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

Python Logging to MultipleНаправления

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

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

[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: 04,066 - root - ПРЕДУПРЕЖДЕНИЕ - 3
2010-12-14 11: 39: 04,066 - root - ERROR - 4
2010-12-14 11: 39: 04,066 - root - CRITICAL - 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()

Ответы [ 4 ]

21 голосов
/ 19 июля 2011

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

13 голосов
/ 14 декабря 2010

Добавление следующей строки в корневой логгер помогло решить мою проблему:

level=NOTSET
1 голос
/ 23 мая 2018

Просто добавьте уровень журнала в [logger_root]. Это сработало.

[logger_root]
level=DEBUG
handlers=screen,file
1 голос
/ 31 октября 2015
#!/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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...