mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-25 17:13:57 +00:00
log, logview: use levels instead of prefixes and colorize log view output
This commit is contained in:
@@ -24,6 +24,11 @@ from PyQt4 import QtCore
|
||||
from picard.util import thread
|
||||
|
||||
|
||||
LOG_INFO = 1
|
||||
LOG_WARNING = 2
|
||||
LOG_ERROR = 4
|
||||
LOG_DEBUG = 8
|
||||
|
||||
_entries = deque(maxlen=50000)
|
||||
_receivers = []
|
||||
_log_debug_messages = False
|
||||
@@ -37,22 +42,19 @@ def unregister_receiver(receiver):
|
||||
_receivers.remove(receiver)
|
||||
|
||||
|
||||
def _message(prefix, message, args, kwargs):
|
||||
def _message(level, message, args, kwargs):
|
||||
if not (isinstance(message, str) or isinstance(message, unicode)):
|
||||
message = repr(message)
|
||||
if args:
|
||||
message = message % args
|
||||
prefix = "%s" % (prefix,)
|
||||
time = str(QtCore.QTime.currentTime().toString())
|
||||
message = "%s" % (message,)
|
||||
if isinstance(prefix, unicode):
|
||||
prefix = prefix.encode("utf-8", "replace")
|
||||
if isinstance(message, unicode):
|
||||
message = message.encode("utf-8", "replace")
|
||||
_entries.append((prefix, time, message))
|
||||
_entries.append((level, time, message))
|
||||
for func in _receivers:
|
||||
try:
|
||||
func(prefix, time, message)
|
||||
func(level, time, message)
|
||||
except Exception, e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
@@ -60,23 +62,33 @@ def _message(prefix, message, args, kwargs):
|
||||
|
||||
def debug(message, *args, **kwargs):
|
||||
if _log_debug_messages:
|
||||
thread.proxy_to_main(_message, "D:", message, args, kwargs)
|
||||
thread.proxy_to_main(_message, LOG_DEBUG, message, args, kwargs)
|
||||
|
||||
|
||||
def info(message, *args, **kwargs):
|
||||
thread.proxy_to_main(_message, "I:", message, args, kwargs)
|
||||
thread.proxy_to_main(_message, LOG_INFO, message, args, kwargs)
|
||||
|
||||
|
||||
def warning(message, *args, **kwargs):
|
||||
thread.proxy_to_main(_message, "W:", message, args, kwargs)
|
||||
thread.proxy_to_main(_message, LOG_WARNING, message, args, kwargs)
|
||||
|
||||
|
||||
def error(message, *args, **kwargs):
|
||||
thread.proxy_to_main(_message, "E:", message, args, kwargs)
|
||||
thread.proxy_to_main(_message, LOG_ERROR, message, args, kwargs)
|
||||
|
||||
|
||||
def _stderr_receiver(prefix, time, msg):
|
||||
sys.stderr.write("%s %s %s %s%s" % (prefix, str(QtCore.QThread.currentThreadId()), time, msg, os.linesep))
|
||||
_log_prefixes = {
|
||||
LOG_INFO: 'I:',
|
||||
LOG_WARNING: 'W:',
|
||||
LOG_ERROR: 'E:',
|
||||
LOG_DEBUG: 'D:',
|
||||
}
|
||||
|
||||
|
||||
def _stderr_receiver(level, time, msg):
|
||||
sys.stderr.write("%s %s %s %s%s" % (_log_prefixes[level],
|
||||
str(QtCore.QThread.currentThreadId()),
|
||||
time, msg, os.linesep))
|
||||
|
||||
|
||||
register_receiver(_stderr_receiver)
|
||||
|
||||
@@ -26,25 +26,42 @@ class LogView(QtGui.QDialog):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
QtGui.QDialog.__init__(self, parent)
|
||||
self.resize(540, 340)
|
||||
self.resize(740, 340)
|
||||
self.setWindowTitle(_("Log"))
|
||||
self.doc = QtGui.QTextDocument(self)
|
||||
self.textCursor = QtGui.QTextCursor(self.doc)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Monospace")
|
||||
self.textFormat = QtGui.QTextCharFormat()
|
||||
self.textFormat.setFont(font)
|
||||
self.textFormatInfo = QtGui.QTextCharFormat()
|
||||
self.textFormatInfo.setFont(font)
|
||||
self.textFormatInfo.setForeground(QtGui.QColor('black'))
|
||||
self.textFormatDebug = QtGui.QTextCharFormat()
|
||||
self.textFormatDebug.setFont(font)
|
||||
self.textFormatDebug.setForeground(QtGui.QColor('purple'))
|
||||
self.textFormatWarning = QtGui.QTextCharFormat()
|
||||
self.textFormatWarning.setFont(font)
|
||||
self.textFormatWarning.setForeground(QtGui.QColor('darkorange'))
|
||||
self.textFormatError = QtGui.QTextCharFormat()
|
||||
self.textFormatError.setFont(font)
|
||||
self.textFormatError.setForeground(QtGui.QColor('red'))
|
||||
self.formats = {
|
||||
log.LOG_INFO: self.textFormatInfo,
|
||||
log.LOG_WARNING: self.textFormatWarning,
|
||||
log.LOG_ERROR: self.textFormatError,
|
||||
log.LOG_DEBUG: self.textFormatDebug,
|
||||
}
|
||||
|
||||
self.browser = QtGui.QTextBrowser(self)
|
||||
self.browser.setDocument(self.doc)
|
||||
vbox = QtGui.QHBoxLayout(self)
|
||||
vbox.addWidget(self.browser)
|
||||
for level, time, msg in log._entries:
|
||||
self.add_entry(prefix, time, msg)
|
||||
self.add_entry(level, time, msg)
|
||||
log.register_receiver(self.add_entry)
|
||||
|
||||
def add_entry(self, prefix, time, msg):
|
||||
def add_entry(self, level, time, msg):
|
||||
self.textCursor.movePosition(QtGui.QTextCursor.End)
|
||||
self.textCursor.insertText(prefix + ' ' + str(QtCore.QThread.currentThreadId()) + ' ' + time + ' ' + msg, self.textFormat)
|
||||
self.textCursor.insertText(time + ' ' + msg, self.formats[level])
|
||||
self.textCursor.insertBlock()
|
||||
sb = self.browser.verticalScrollBar()
|
||||
sb.setValue(sb.maximum())
|
||||
|
||||
Reference in New Issue
Block a user