Как использовать файл журнала, созданный в Conftest.py в других файлах? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть следующие настройки

../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 для правильной регистрации? Как еще я могу добиться такого же результата?

Спасибо

Обновление: Я использовал подход, описанный

  1. https://blog.muya.co.ke/configuring-multiple-loggers-python/.
  2. https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/

С некоторыми изменениями это отвечает на мой вопрос. Еще один урок, который я узнал, что использовать

 logging.getLogger(__name__)

на уровне функций, а не на уровне модулей. Вы можете увидеть множество примеров (включая эту статью, я сделал это только для краткого примера) get logger на уровне модуля. Они выглядят безвредными, но на самом деле есть ловушка - модуль регистрации Python учитывает все созданные средства ведения журнала перед загрузкой конфигурации из файла, если вы получаете средство ведения журнала на уровне модуля, например

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Я использовал подход, описанный в https://blog.muya.co.ke/configuring-multiple-loggers-python/.

С некоторыми изменениями это касается моего вопроса.

0 голосов
/ 07 мая 2019

Что ж, мое первое предположение: если вы не импортируете Conftest.py в test_1.py, код настройки регистратора не будет достигнут и не будет выполнен, поэтому запись в файл Test_1 находится в файле журнала расположения по умолчанию.,

Попробуйте эту строку, чтобы найти местоположение файла журнала:

logging.getLoggerClass().root.handlers[0].baseFilename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...