Поскольку это Python и логи помечены тегами, есть еще одна возможность сделать это.
Я предполагаю, что это основано на Python logger, logging.Handler based.
Вы можете просто создать класс, который получает (именованный) экземпляр средства ведения журнала, и переписать функцию emit
, чтобы поместить его в графический интерфейс (если вам нужна консоль, просто добавьте обработчик консоли в обработчик файлов)
Пример:
import logging
class log_viewer(logging.Handler):
""" Class to redistribute python logging data """
# have a class member to store the existing logger
logger_instance = logging.getLogger("SomeNameOfYourExistingLogger")
def __init__(self, *args, **kwargs):
# Initialize the Handler
logging.Handler.__init__(self, *args)
# optional take format
# setFormatter function is derived from logging.Handler
for key, value in kwargs.items():
if "{}".format(key) == "format":
self.setFormatter(value)
# make the logger send data to this class
self.logger_instance.addHandler(self)
def emit(self, record):
""" Overload of logging.Handler method """
record = self.format(record)
# ---------------------------------------
# Now you can send it to a GUI or similar
# "Do work" starts here.
# ---------------------------------------
# just as an example what e.g. a console
# handler would do:
print(record)
В настоящее время я использую аналогичный код для добавления TkinterTreectrl.Multilistbox для просмотра выходных данных регистратора во время выполнения.
Off-Side: регистратор получает данные только после их инициализации, поэтому, если вы хотите, чтобы все ваши данные были доступны, вам нужно инициализировать их в самом начале. (Я знаю, что это то, что ожидается, но я думаю, что стоит упомянуть.)