Я прочитал документацию модуля логирования, и, хотя я, возможно, упустил что-то очевидное, код, который я получил, не работает должным образом. Я использую 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 является дочерним по отношению к регистратору "stumbler", он должен использовать это форматирование и выводить журналы как таковые.
Извиняюсь за сочинение по поводу такой тривиальной проблемы.
TL; DR: Как вести запись из нескольких файлов?