diff --git a/picard/log.py b/picard/log.py index 815c3cf34..764368d8c 100644 --- a/picard/log.py +++ b/picard/log.py @@ -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) diff --git a/picard/ui/logview.py b/picard/ui/logview.py index b9ce7236c..8ab98d578 100644 --- a/picard/ui/logview.py +++ b/picard/ui/logview.py @@ -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())