#python #django #logging
#python #django #ведение журнала
Вопрос:
У меня есть настройка ведения журнала в моем settings.py и я хочу знать, возможно ли добавить в строку журнала ошибок — У какого пользователя произошла ошибка и временную метку для проблемы. Возможно ли это?
Текущий код
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
Ответ №1:
Вы можете добавлять форматеры и использовать их в своих обработчиках. Вот список доступных атрибутов по умолчанию, которые вы можете добавить, например, временную метку с помощью {asctime}
. Чтобы добавить пользователя, вам нужно будет указать его в вызове logging в качестве дополнительного аргумента, как показано здесь.
LOGGING = {
'formatters': {
'timestamp': {
'format': '{asctime} {levelname} {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'timestamp'
},
},
'loggers': {
'django': {
'handlers': ['console'],
},
},
}
Комментарии:
1. Я получаю эту ошибку при запуске. Я использую uwsgi nginx для запуска сервера
--- no python application found, check your startup logs for errors ---
2. Не знаю, как это могло произойти из-за определения значений в словаре в вашем settings.py .
Ответ №2:
Вы можете определить средство форматирования для журнала, например:
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
}
},
Чтобы зарегистрировать пользователя, у которого возникла ошибка, вам нужно будет передать имя пользователя в сообщении, например, в вашем представлении:
def my_view(request):
logger.error('View error for user {}'.format(request.user.username))
Комментарии:
1. Это означает, что мне пришлось бы вручную добавлять точки в свой код, чтобы в случае чего зарегистрировать эту ошибку. На данный момент у меня этого нет. Я хотел бы, чтобы он автоматически записывал ошибку, которую заметила система, и просто добавлял пользователя и временную метку к этой ошибке.
2. Это единственный способ, который я могу придумать, чтобы зарегистрировать пользователя, столкнувшегося с ошибкой. Вот список атрибутов, записанных регистратором docs.python.org/3/library/logging.html#logrecord-attributes
Ответ №3:
'formatters': {
'verbose': {
'format': '%(asctime)s; %(name)s] Message "%(message)s" from %
(pathname)s:%(lineno)d in %(funcName)s',
'datefmt': "%d/%b/%Y %H:%M:%S"
},
}
Вы можете добавить новый форматировщик с указанным выше форматом. он должен иметь возможность регистрировать номер строки. но для входа в систему имени пользователя я не думаю о каких-либо других способах, кроме ручного выполнения этого.