Вход в отдельные файлы в Python - PullRequest
0 голосов
/ 24 августа 2018

Я использую модуль регистрации Python. Я инициализировал это как:

import logging
logger = logging.getLogger(__name__)

в каждом из моих модулей. Затем в основном файле:

logging.basicConfig(level=logging.INFO,filename="log.txt")

Теперь в приложении я также использую WSGIServer от gevent. Инициализатор принимает аргумент журнала, где я могу добавить экземпляр регистратора. Поскольку это HTTP-сервер, он очень многословен.

Я бы хотел записывать все обычные журналы моего приложения в «log.txt», а журналы WSGIServer - в «http-log.txt».

Я пробовал это:

logging.basicConfig(level=logging.INFO,filename="log.txt")
logger = logging.getLogger(__name__)

httpLogger = logging.getLogger("HTTP")
httpLogger.addHandler(logging.FileHandler("http-log.txt"))
httpLogger.addFilter(logging.Filter("HTTP"))

http_server = WSGIServer(('0.0.0.0', int(config['ApiPort'])), app, log=httpLogger)

Это регистрирует все HTTP-сообщения в http-log.txt, но также и в главный регистратор.

Как я могу отправлять все сообщения, кроме HTTP, в регистратор по умолчанию (log.txt), а сообщения HTTP только в http-log.txt?

РЕДАКТИРОВАТЬ: Поскольку люди быстро пытаются указать, что это Регистрация двух файлов с разными настройками имеет ответ, просим прочитать связанный ответ, и вы увидите, что они не используют basicConfig, но скорее инициализируйте каждый регистратор отдельно. Это не то, как я использую модуль регистрации.

1 Ответ

0 голосов
/ 24 августа 2018

Добавьте следующую строку, чтобы отключить распространение :

httpLogger.propagate = False

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

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