dieses kleine Schnipsel Gegeben:Python Log-Ausgabe sowohl GUI und Konsole
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_())
Fragen:
- Warum log zu schreiben sowohl die Konsole und gui? So weit ich weiß
log.handlers
len sollte nur 1 sein. - Wie kann ich nur auf die GUI schreiben unterdrücken die Konsole Nachrichten?
- Warum ist das GUI-Format nicht das von BasicConfig angegebene?
Eine Frage jedoch, wenn Sie sagen 'das fügt dem Stammlogger einen Konsolenlogger hinzu, wenn er noch keine Handler hat' ... warum zeigt' log.handlers' nicht den Konsolenlogger nach dem Aufruf von ' basicConfig() '? – BPL
@BPL 'log' ist nicht der Root-Logger und' log.handlers' hat den einen Logger, den Sie hinzugefügt haben, korrekt. Der Aufruf 'basicConfig()' fügt dem Stammlogger Handler hinzu, die auch für die Ausgabe von Ereignissen verwendet werden, die in 'log' protokolliert sind, wie im Link" Informationsfluss "in meiner Antwort angegeben. –
Gibt es eine Möglichkeit, die Instanz oder ID() dieser Root-Logger zu bekommen? Ich bin nur neugierig zu sehen, wo BasicConfig() den Handler hinzugefügt hat. – BPL