Как отправить сообщение только одному файлообменнику из класса logger

#python-3.x #flask #logging

#python-3.x #flask #ведение журнала

Вопрос:

Итак, я настроил один регистратор с несколькими обработчиками в своем приложении flask. Из исследования, которое я провел до сих пор, кажется, что у вас может быть только один регистратор в приложении flask. Итак, для управления разными потоками мне нужно добавить обработчики. Моя проблема в том, что каждое сообщение отправляется всем обработчикам. Кто-нибудь знает способ отправить сообщение одному обработчику с экземпляром Logger?

У меня есть обходной путь, но я не совсем в восторге от этого, я чувствую, что мне здесь не хватает чего-то основного, но, думаю, мой Google-fu сегодня слаб.

 import logging
from contextlib import suppress 
log_fmt = logging.Formatter(
        fmt='%(levelname)s: %(asctime)s - %(name)s - : %(message)s',
        datefmt='%m/%d/%Y %H:%M:%S'
    )


v = logging.FileHandler(f'log1.log')
v.setFormatter(log_fmt)
v.setLevel(logging.INFO)
v.name = f'log1'
lg = logging.getLogger('log1')
lg.setLevel(logging.INFO)
lg.addHandler(v)



b = logging.FileHandler(f'log2.log')
b.setFormatter(log_fmt)
b.setLevel(logging.INFO)
b.name = f'log2'
# I can write to different files if i create different loggers, but then we run into the flask limitation
#lg2 = logging.getLogger('log2')
#lg2.setLevel(logging.INFO)
lg.addHandler(b)

l1 = logging.getLogger('log1')

#probably there is a better way to handle this but its just an example
def to_handler(msg, name='log1'):
    msg = logging.LogRecord(name, logging.INFO, '',0,msg,[],'')
    with suppress(IndexError):
        [x for x in l1.handlers if getattr(x,'name', '') == name][0].emit(msg)

l1.to_handler = to_handler


# in a client module
import logging 
l1 = logging.getLogger('log1')
l1.to_handler('some mildly important information')

  

при настройке регистратора в flask я должен сделать

 app.logger = l1
  

вот почему я не уверен, как я могу использовать несколько регистраторов