Я создал регистратор, используя следующий код:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='application.log', mode='a+')
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
Всякий раз, когда я пытаюсь записать в журнал, используя приведенный ниже код:
logger.info("Application Started")
Я получаю следующий Traceback:
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.7/logging/__init__.py", line 985, in emit
stream.write(msg)
TypeError: a bytes-like object is required, not 'str'
Call stack:
File "/home/<user>/Code/<app_name>/src/<app_name>.py", line 48, in <module>
main()
File "/home/<user>/Code/<app_name>/src/<app_name>.py", line 42, in main
logger.info("Application Started")
Message: 'Application Started'
Arguments: ()
Я знаю, что, учитывая исключение выше, вы ожидаете, что файл будет открыт в двоичном режиме, кроме него нет, я только открываю, используя режим "a+".
Обновление. Я попытался добавить encoding = 'utf-8' в обработчик файлов, а также mode = 'a+ t' и удалить имя имени именованного параметра в соответствии с предложениями в нижеприведенных комментариях безрезультатно.
Оказывается, логгер настраивался в другом месте проекта, который использует io.BytesIO() в качестве обработчика потока. Это привело к тому, что логгер ожидал байты для одного регистратора, а str для другого. Снятие другой реализации каротажа решило проблему.
stream.write(msg)
. Явно не записываю в файл! github.com/python/cpython/blob/3.7/Lib/logging/...
logger.info('Application Started')
а неlogging.info('Application Started')
.