#python #logging
Вопрос:
Я не так хорошо знаком с лесорубом; пожалуйста, позвольте мне спросить.
В принципе, я хочу регистрировать все, что печатаю. Проблема в том, что строки печати находятся внутри функций, объявленных во внешних файлах. Например, мой main.py
файл выглядит так
from do_run import do_run
import logging
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger()
logger.addHandler(logging.FileHandler('test.log', 'a'))
global print
print = logger.info
do_run()
И у меня есть строки печати в функции do_run (), определенной в отдельном файле python do_run.py
:
def do_run():
print('blah')
Проблема в том, что » бла «не печатается в «тесте».файл журнала, и я хочу, чтобы он был напечатан в нем.
Есть ли простой способ это исправить?
Комментарии:
1. не переопределяйте встроенную
Ответ №1:
Вид взлома, но вы можете использовать patch
from unittest.mock
для того, чтобы он регистрировался в файле, а также печатался.
from src.do_run import do_run
import logging
from unittest.mock import patch
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger()
logger.addHandler(logging.FileHandler('test.log', 'a'))
with patch("src.do_run.print", logger.info):
do_run()
Когда я запускаю приведенный выше код, я получаю test.log
файл с содержимым blah
в нем.