Добавьте временную метку и имя пользователя в журнал

#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"
        },
}
  

Вы можете добавить новый форматировщик с указанным выше форматом. он должен иметь возможность регистрировать номер строки. но для входа в систему имени пользователя я не думаю о каких-либо других способах, кроме ручного выполнения этого.