Несколько наблюдателей журнала, использующих твист - PullRequest
0 голосов
/ 26 сентября 2018

Я в процессе рефакторинга моего сервера на основе Twisted в плагин twistd.Мне нужно, чтобы записи в журнале были записаны в нескольких форматах по нескольким адресатам.В коде инициализации моего сервера globalLogBeginner делает трюк:

observers = [jsonFileLogObserver(open("serverlog.json", "a")),
             textFileLogObserver(sys.stdout)]
globalLogBeginner.beginLoggingTo(observers)

Уже разобрался, как использовать опцию --logger twistd для вывода в файл JSON, но он работает только для одной цели.Как настроить несколько наблюдателей журнала для Twistd?

Редактировать: В качестве временного решения я создал собственный класс, реализующий ILogObserver:

@implementer(ILogObserver)
class MultiLogger:

    def __init__(self, loggers):
        self.loggers = loggers

    def __call__(self, event):
        for logger in self.loggers:
            logger.__call__(event)

def multilogger():
   return MultiLogger(
       jsonFileLogObserver(open(SERVERLOG, "a")),
       textFileLogObserver(stdout))

И я передаю --logger = mymodule.multilogger в twistd.Теперь это работает, но я все еще хочу знать, есть ли лучший способ сделать это.

...