вход в wxPython: wxLog и вход во внешние пакеты - PullRequest
0 голосов
/ 10 февраля 2019

Приложение 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) невозможна из-за количества сообщений.

Любая помощь приветствуется, чтобы приблизиться к решению!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...