Приложение wxpython GUI, над которым я работаю, использует несколько внешних пакетов.
В графическом интерфейсе я использую подклассы wxPython wx.Log и перенаправляю их в textctrl:
class MyLog(wx.Log):
def __init__(self, textCtrl):
wx.Log.__init__(self)
self.tc = textCtrl
def DoLogText(self, message):
if self.tc:
self.tc.AppendText(message + '\n')
textcrl активен для получения сообщений:
wx.Log.SetActiveTarget(MyLog(self.logctrl))
регистрация проста, все сообщения появляются в textcrl:
wx.LogStatus('It just works')
Из внешних пакетов каждый модуль имеет свой собственный объект регистратора (на уровне модуля), экземпляр которого создается той же функцией.Это создает простой регистратор StreamHandler.
def getlogger(name):
"""returns a logger with the given name"""
_logger = logging.getLogger(name)
_logger.handlers.clear()
_logger.level = logging.DEBUG
_handler = logging.StreamHandler()
_formatter = logging.Formatter(fmt='%(asctime)s-%(name)s-%(levelname)s-%(message)s')
_handler.setFormatter(_formatter)
_logger.addHandler(_handler)
return _logger
В настоящее время графический интерфейс хорошо регистрируется в textctrl, внешние пакеты - в стандартный вывод.
Я хочу собрать все сообщения журнала графического интерфейса ивнешние пакеты в одной цели (textctrl, файл, что угодно) в графическом интерфейсе, но им трудно поймать вывод внешних пакетов.
Я попытался просто перехватить стандартный вывод и направить его наtextcrtl из GUI, что-то, что работает как чудо, когда регистратор, генерирующий сообщения, определяется в приложении GUI (то есть вместо использования инфраструктуры wxLog используется модуль журналирования), но это не мой случай.
Запись в файлы и чтение из них (регистрация FileHandler) невозможна из-за количества сообщений.
Любая помощь приветствуется, чтобы приблизиться к решению!