diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 0d6081b8a..4ad838fc3 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -57,6 +57,7 @@ Fixed - Crash in the `importer.py` script when importing Chrome bookmarks from newer Chrome versions. - The `content.webrtc_public_interfaces_only` option didn't work on Qt 5.11 previously (it now does). Note it still does not work on Qt 5.10 (due to a Qt bug) and Qt < 5.9.2. +- Repeated escaping of entries in `qute://log` when refreshing page. v1.4.1 ------ diff --git a/qutebrowser/utils/log.py b/qutebrowser/utils/log.py index 48711614d..afe0a3cb3 100644 --- a/qutebrowser/utils/log.py +++ b/qutebrowser/utils/log.py @@ -25,6 +25,7 @@ import html as pyhtml import logging import contextlib import collections +import copy import faulthandler import traceback import warnings @@ -568,16 +569,14 @@ class RAMHandler(logging.Handler): https://github.com/qutebrowser/qutebrowser/issues/34 """ minlevel = LOG_LEVELS.get(level.upper(), VDEBUG_LEVEL) - lines = [] fmt = self.html_formatter.format if html else self.format self.acquire() try: - records = list(self._data) + lines = [fmt(record) + for record in self._data + if record.levelno >= minlevel] finally: self.release() - for record in records: - if record.levelno >= minlevel: - lines.append(fmt(record)) return '\n'.join(lines) def change_log_capacity(self, capacity): @@ -637,17 +636,18 @@ class HTMLFormatter(logging.Formatter): self._colordict['reset'] = '' def format(self, record): - record.__dict__.update(self._colordict) - if record.levelname in self._log_colors: - color = self._log_colors[record.levelname] - record.log_color = self._colordict[color] + record_clone = copy.copy(record) + record_clone.__dict__.update(self._colordict) + if record_clone.levelname in self._log_colors: + color = self._log_colors[record_clone.levelname] + record_clone.log_color = self._colordict[color] else: - record.log_color = '' + record_clone.log_color = '' for field in ['msg', 'filename', 'funcName', 'levelname', 'module', 'name', 'pathname', 'processName', 'threadName']: - data = str(getattr(record, field)) - setattr(record, field, pyhtml.escape(data)) - msg = super().format(record) + data = str(getattr(record_clone, field)) + setattr(record_clone, field, pyhtml.escape(data)) + msg = super().format(record_clone) if not msg.endswith(self._colordict['reset']): msg += self._colordict['reset'] return msg