Учитывая этот небольшой отрывок:питон выход каротаж на обоих GUI и консоли
import sys
import os
import logging
from PyQt5 import QtGui, QtWidgets, QtCore
log = logging.getLogger("Foo")
logging.basicConfig(
level=logging.INFO, format='%(levelname)s: %(filename)s - %(message)s')
log.setLevel(logging.DEBUG)
class ConsolePanelHandler(logging.Handler):
def __init__(self, parent):
logging.Handler.__init__(self)
self.parent = parent
def emit(self, record):
self.parent.write(self.format(record))
class Foo(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.textEdit = QtWidgets.QTextEdit(self)
self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
self.textEdit.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
vbox = QtWidgets.QVBoxLayout()
self.setLayout(vbox)
vbox.addWidget(self.textEdit)
def write(self, s):
self.textEdit.setFontWeight(QtGui.QFont.Normal)
self.textEdit.append(s)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
console_panel = Foo()
handler = ConsolePanelHandler(console_panel)
log.addHandler(handler)
log.info("Getting logger {0} - {1}".format(id(log), log.handlers))
[log.debug("This is normal text " + str(i)) for i in range(5)]
console_panel.show()
sys.exit(app.exec_())
Вопросы:
- Почему журнал пишущие как к консоли и графического интерфейса? Насколько я знаю
log.handlers
len должно быть только 1. - Как я могу написать только gui, подавляющее сообщения консоли?
- Почему формат gui не тот, который указан basicConfig?
Один вопрос, хотя вы говорите: «Это добавляет консольный регистратор в корневой журнал, если он уже не имеет обработчиков» ... почему «log.handlers» не показывает мне консольный логгер после вызова ' basicConfig() '? – BPL
@BPL 'log' не является корневым регистратором, а' log.handlers' правильно имеет один регистратор, который вы добавили. Вызов 'basicConfig()' добавляет обработчики в корневой журнал, которые также используются для вывода событий, зарегистрированных в журнал, в соответствии с ссылкой «поток информации» в моем ответе. –
Есть ли способ получить экземпляр или id() этого корневого регистратора? Мне просто интересно узнать, где basicConfig() добавил обработчик. – BPL