Python, регистрирующийся по нескольким файлам

Я прочитал регистрирующуюся документацию модуля и пока я, возможно, пропустил что-то очевидное, код, который я имею, кажется, не работает, как предназначено. Я использую Python 2.6.4.

Моя программа состоит из нескольких различных файлов Python, из которых я хочу отправить регистрирующиеся сообщения в текстовый файл и, потенциально, экран. Я предполагаю, что это - общая вещь сделать так, я порчу это где-нибудь.

То, что мой код делает в минуту, регистрируется к текстовому файлу правильно, отчасти. Но вход на экран дублируется, один с указанным форматированием, и один без. Кроме того, когда я выключаю экранный вывод, я все еще печатал текст однажды, который я не хочу - я просто хочу, чтобы он был зарегистрирован в файл.

Так или иначе, некоторый код:

#logger.py
import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):        
    logdir = os.path.abspath(logdir)

    if not os.path.exists(logdir):
        os.mkdir(logdir)

    log = logging.getLogger('stumbler')
    log.setLevel(loglevel)

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

    if txtlog:
        txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
        txt_handler.doRollover()
        txt_handler.setFormatter(log_formatter)
        log.addHandler(txt_handler)
        log.info("Logger initialised.")

    if scrnlog:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(log_formatter)
        log.addHandler(console_handler)

Ничто необычное там.

#core.py
import logging
corelog = logging.getLogger('stumbler.core')  # From what I understand of the docs, this should work :/

class Stumbler:
    [...]

    corelog.debug("Messages and rainbows...")

Экран произвел шоу, как это дублируется:

2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe

Хотя текстовый файл получает правильно форматированный вывод, поворачиванию экрана, выходящего из системы в logger.py все еще, отобразили неправильно отформатированный вывод.

Из того, что я понимаю документов, звоня corelog.debug (), видя, поскольку corelog является ребенком регистратора "хромого", он должен использовать то форматирование и произвести журналы как таковые.

Извинения за эссе по такой тривиальной проблеме.

TL; DR: Как я делаю вход из нескольких файлов?

6
задан Loix0 8 January 2010 в 23:01
поделиться

1 ответ

[

]Уверены ли вы, что никакая другая настройка протоколирования не выполняется во время импорта.[

] [

]Неправильный вывод в ваших консольных журналах выглядит как настройка по умолчанию для логгера, так что что что-то еще может быть настроено. [

] [

]Запуск этого быстрого тестового скрипта:[

] [
import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
    logdir = os.path.abspath(logdir)

    if not os.path.exists(logdir):
        os.mkdir(logdir)

    log = logging.getLogger('stumbler')
    log.setLevel(loglevel)

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

    if txtlog:
        txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
        txt_handler.doRollover()
        txt_handler.setFormatter(log_formatter)
        log.addHandler(txt_handler)
        log.info("Logger initialised.")

    if scrnlog:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(log_formatter)
        log.addHandler(console_handler)



setup_logging('/tmp/logs')
corelog = logging.getLogger('stumbler.core')
corelog.debug("Messages and rainbows...")
] [

]дает такой результат:[

] [
] [

]2010-01-08 15:39:25,335 - DEBUG :: Сообщения и радуги...[

] [
] [

]и в моем /tmp/logs/Stumbler.log[

] [
] [

]2010-01-08 15:39:25,335 - INFO :: Логгер инициализирован. 2010-01-08 15:39:25,335 - ОТЛАДКА:..: Сообщения и радуги...[

] [
] [

] Это сработало, как и ожидалось, когда я запустил его в питоне 2.4, 2.5 и 2.6.4[

].
12
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: