Я хочу добавить session_id
к каждому сообщению журнала. Поэтому я могу сделать это в каждом запросе таким образом.Можно ли вставлять переменную в журнал регистрации python. Фильтр
log.info('[%s] my message', self.session_id);
или даже handler. Но для этого требуется передать %s
и переменную сеанса в журнал каждый раз, когда я что-то записываю. Ну, чтобы пропустить грязную работу, я могу создать filter:
class ContextFilter(logging.Filter):
def filter(self, record):
record.my_session = 'LOL'
return True
Я использую Django + смерч, так что я изменить LOGGING
переменную в settings.py
:
'filters': {
'user_filter': {
'()': 'my_package.ContextFilter',
}
},
'formatters': {
'verbose': {
'format': '[%(asctime)s %(my_session)s] %(message)s',
},
},
И когда, если я пишу что-то подобное :
class A(object):
def __init__(self):
self.session_id = random(1024)
def process(self):
log.info('hello')
Я хотел бы получить:
[11:23 LOL] hello
.
Хорошо, теперь я хочу ввести A.session_id
вместо фильтра LOL
. Обратите внимание, что session_id
определяется в области A
каждый раз, когда я что-то записываю. Конечно, я могу обернуть каждый метод logger (трассировка, информация, отладка ...) и добавить туда функции сеанса, но это сломает номер строки.
Я бы сделал что-то вроде статической переменной и статического сеттера в ContextFilter
, но, к сожалению, я использую использование торнадо (запрос выполняется в том же потоке), что означает, что я не могу использовать контекстный контекст потока событий. Является ли фильтр единственным обходным путем для получения пользовательской переменной для входа в журнал?