Я использую Django 1.3 со стандартным журналом Python.Я настроил его для регистрации ошибок в файле:
'loggers': {
'django': {
'handlers': ['logfile'],
'level': 'ERROR',
'propagate': False,
},
Я также хочу, чтобы имя пользователя текущего зарегистрированного пользователя Django было зарегистрировано.Для этого я определил свой собственный модуль форматирования с форматом, включающим «% (имя пользователя) s», и создал свой собственный класс ведения журнала (с именем RequestLogger
), который заполняет дополнительный атрибут username
.Осталось только позвонить:
logging.setLoggerClass(RequestLogger)
Вопрос в следующем: Где мне это назвать? Я пытался поместить его в __init__.py
(на уровне проекта)и в settings.py
.Обе они прекрасно работают с сервером разработки Django, но при работе в Apache с использованием WSGI в журнале ошибок Apache появляются следующие ошибки:
[error] Traceback (most recent call last):
[error] File "/usr/lib/python2.7/logging/__init__.py", line 842, in emit
[error] msg = self.format(record)
[error] File "/usr/lib/python2.7/logging/__init__.py", line 719, in format
[error] return fmt.format(record)
[error] File "/usr/lib/python2.7/logging/__init__.py", line 467, in format
[error] s = self._fmt % record.__dict__
[error] KeyError: 'username'
[error] Logged from file base.py, line 209
Это, по-видимому, означает, что в WSGI инициализируется регистратор Djangoдо моего logging.setLoggerClass()
звонка.(Это определенно вызывается, потому что моя собственная регистрация работает и включает имя пользователя).