Я прочитал регистрирующуюся документацию модуля и пока я, возможно, пропустил что-то очевидное, код, который я имею, кажется, не работает, как предназначено. Я использую 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: Как я делаю вход из нескольких файлов?
]Уверены ли вы, что никакая другая настройка протоколирования не выполняется во время импорта.[
] []Неправильный вывод в ваших консольных журналах выглядит как настройка по умолчанию для логгера, так что что что-то еще может быть настроено. [
] []Запуск этого быстрого тестового скрипта:[
] [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[
].