используя класс логгера Python для генерации нескольких логов для разных уровней логов

Я просмотрел учебники для класса питоновского протоколирования здесь и не увидел ничего, что позволило бы мне сделать несколько логов разных уровней для одного и того же вывода. В конце концов, я хотел бы иметь три журнала: _DEBUG.log (уровень отладки)
_INFO.log (информационный уровень)
_ERROR.log (уровень ошибок)

Есть ли способ в одном скрипте сгенерировать несколько лог-файлов для одного и того же входа?

<-------------UPDATE #1-------------------------->
Поэтому, реализуя предложение @robert, у меня появилась небольшая проблема, наверное, из-за неполного понимания того, что делается в его коде.

Вот мой код в scriptRun.py

import os
import logging

logger = logging.getLogger("exceptionsLogger")
debugLogFileHandler = logging.FileHandler("Debug.log")
errorLogFileHandler = logging.FileHandler("Error.Log")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
errorLogFileHandler.setFormatter(formatter)
debugLogFileHandler.setFormatter(formatter)
logger.addHandler(debugLogFileHandler)
logger.addHandler(errorLogFileHandler)

class LevelFilter(logging.Filter):
    def __init__(self, level):
        self.level = level
    def filter(self, record):
        return record.levelno == self.level
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
errorLogFileHandler.addFilter(LevelFilter(logging.ERROR))

directory = []
for dirpath, dirnames, filenames in os.walk("path\to\scripts"):
    for filename in [f for f in filenames if f.endswith(".py")]:
        directory.append(os.path.join(dirpath, filename))
for entry in directory:
    execfile(entry)
    for lists in x:
        if lists[0] == 2:
            logger.error(lists[1]+"   "+lists[2])
        elif lists[0] == 1:
            logger.debug(lists[1]+"   "+lists[2])

- пример того, что он выполняется:

import sys

def script2Test2():
    print y
def script2Ttest3():
    mundo="hungry"

global x 
x = []

theTests = (test2, test3)

for test in theTests:
    try:
        test()
        x.append([1,test.__name__," OK"])
    except:
        error = str(sys.exc_info()[1])
        x.append([2,test.__name__,error])

Теперь к моему вопросу: запуск scriptRun.py не бросает никаких ошибок, когда я запускаю его, и error.log и debug.log создаются, но только error.log заполняется записей.

есть идея почему?

<------------------------Update #2----------------------->

Так что я понял, что в лог не записывается ничего "ниже", чем предупреждение. Даже если я удалю фильтры и debugLogFileHandler.setLevel(log.DEBUG), это, кажется, не имеет никакого значения. Если я установлю фактическую команду log на loger.warning или выше, то она будет выводиться в журнал. Конечно, как только я освобождаю от комментариев debugLogFileHandler.addFilter(LevelFilter(log.DEBUG)), я не получаю лог-активности в Debug.log. Соблазнительно просто сделать свой собственный лог-уровень, но это кажется очень плохой идеей, если кто-нибудь/что еще использует этот код.

<-------------------------Final UPDATE--------------------->
Ну, я был глуп и забыл настроить сам логгер на регистрацию событий уровня DEBUG. Так как по умолчанию класс протоколирования не протоколирует ничего ниже предупреждения, он не протоколировал отладочную информацию, которую я ему посылаю.

Окончательная благодарность и крик @Robert для фильтра.

5
задан Snaxib 17 September 2011 в 00:49
поделиться