#python #python-3.x #logging #keyerror
Вопрос:
Конфигурация выглядит следующим образом:
import logging
logger = logging.getLogger()
fhandler = logging.FileHandler(filename='assignment.log', mode='a')
formatter = logging.Formatter('%(asctime)- %(user)8s -%(message)s')
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)
logger.setLevel(logging.INFO)
код, который выдает ошибку:
logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning')
ошибка вывода:
KeyError: 'user'
During handling of the above exception, another exception occurred:
ValueError: Formatting field not found in record: 'user'
Документация на python, содержащая это в качестве ссылки: https://docs.python.org/3/library/logging.html#logging.Форматирующее устройство
Комментарии:
1.
%(user)
не отображается в разделе документации, на который вы ссылались.
Ответ №1:
Документация python содержит пользователя в качестве примера пользовательского формата:
logger.warning('Protocol problem: %s', 'connection reset', **extra=d**)
акцент мой. Если вы хотите использовать конструкцию, вам придется отправить свой собственный словарь в качестве дополнительного параметра, например:
logger.warning('Protocol problem: %s', 'connection reset', extra={"user": "Sarthak"})
Ответ №2:
%(user)
не отображается в разделе документации, на который вы ссылались. Это появляется только в документации о extra
ключевом слове, которое используют определенные функции. Например, logging.debug
и аналогичные вызовы:
Третий необязательный аргумент ключевого слова является дополнительным, который можно использовать для передачи словаря, используемого для заполнения записи
__dict__
журнала, созданной для события ведения журнала, определенными пользователем атрибутами. Затем эти пользовательские атрибуты можно использовать по своему усмотрению. Например, они могут быть включены в зарегистрированные сообщения. Например:FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning('Protocol problem: %s', 'connection reset', extra=d)
Здесь %(user)
в формате относится к user
ключу в extra
дикте, предоставленном в logging.warning
вызове. Если вы не укажете extra
dict, то user
для входа не будет никакого значения.