TypeError при записи в файл журнала

1

Я создал регистратор, используя следующий код:

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' и удалить имя имени именованного параметра в соответствии с предложениями в нижеприведенных комментариях безрезультатно.

  • 0
    Я думаю, что вы должны использовать logger.info('Application Started') а не logging.info('Application Started') .
  • 0
    @toti08 toti08, вы действительно правы, но, несмотря на обновление кода, я все еще получаю ту же ошибку.
Показать ещё 8 комментариев
Теги:
python-3.x
logging
typeerror

1 ответ

0
Лучший ответ

Оказывается, логгер настраивался в другом месте проекта, который использует io.BytesIO() в качестве обработчика потока. Это привело к тому, что логгер ожидал байты для одного регистратора, а str для другого. Снятие другой реализации каротажа решило проблему.

  • 0
    Ключ, который мы все пропустили, был в трассировке стека: stream.write(msg) . Явно не записываю в файл! github.com/python/cpython/blob/3.7/Lib/logging/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню