У меня есть следующие настройки
../test/dirA
../test/Conftest.py
../test/Test_1.py
../test/logging.config
Код для Conftest.py
import logging.config
from os import path
import time
config_file_path = path.join(path.dirname(path.abspath(__file__)), 'logging.conf')
log_file_path = path.join(path.dirname(path.abspath(__file__)), ‘logFile.log’)
logging.config.fileConfig(config_file_path)
logger = logging.getLogger(__name__)
fh = logging.FileHandler(log_file_path)
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
logging.info('done')
Код для ../test/Test_1.py
import logging
logger = logging.getLogger(__name__)
def test_foo():
logger = logging.getLogger(__name__)
logger.info("testing foo")
def test_foobar():
logger = logging.getLogger(__name__)
logger.info("testing foobar")
Мне нужно видеть логи обоих файлов в logFile.log, но в настоящее время я вижу только логи из conftest.py. Чего мне не хватает?
Кроме того, я заметил, что если я запускаю Conftest.py из тестовой папки (один каталог вверх), по какой-то причине он не видит logging.config.
Подходит ли мое использование для conftest для правильной регистрации?
Как еще я могу добиться такого же результата?
Спасибо
Обновление:
Я использовал подход, описанный
- https://blog.muya.co.ke/configuring-multiple-loggers-python/.
- https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/
С некоторыми изменениями это отвечает на мой вопрос.
Еще один урок, который я узнал, что использовать
logging.getLogger(__name__)
на уровне функций, а не на уровне модулей.
Вы можете увидеть множество примеров (включая эту статью, я сделал это только для краткого примера) get logger на уровне модуля. Они выглядят безвредными, но на самом деле есть ловушка - модуль регистрации Python учитывает все созданные средства ведения журнала перед загрузкой конфигурации из файла, если вы получаете средство ведения журнала на уровне модуля, например