tlogging: port ugly accidental side-effect into readable explicit feature - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 387834164cb28a0853d98f609491bab74d1c0975 DIR parent a3e522efd968686a32cbf715e4ac91f531c5deca HTML Author: SomberNight <somber.night@protonmail.com> Date: Thu, 2 May 2019 16:05:26 +0200 logging: port ugly accidental side-effect into readable explicit feature LogFormatterForConsole.format() was mutating its 'record' argument, which was affecting all handlers/formatters Diffstat: M electrum/logging.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) --- DIR diff --git a/electrum/logging.py b/electrum/logging.py t@@ -9,6 +9,7 @@ import pathlib import os import platform from typing import Optional +import copy class LogFormatterForFiles(logging.Formatter): t@@ -20,6 +21,10 @@ class LogFormatterForFiles(logging.Formatter): datefmt = "%Y%m%dT%H%M%S.%fZ" return date.strftime(datefmt) + def format(self, record): + record = _shorten_name_of_logrecord(record) + return super().format(record) + file_formatter = LogFormatterForFiles(fmt="%(asctime)22s | %(levelname)8s | %(name)s | %(message)s") t@@ -27,15 +32,7 @@ file_formatter = LogFormatterForFiles(fmt="%(asctime)22s | %(levelname)8s | %(na class LogFormatterForConsole(logging.Formatter): def format(self, record): - # strip the main module name from the logger name - if record.name.startswith("electrum."): - record.name = record.name[9:] - # manual map to shorten common module names - record.name = record.name.replace("interface.Interface", "interface", 1) - record.name = record.name.replace("network.Network", "network", 1) - record.name = record.name.replace("synchronizer.Synchronizer", "synchronizer", 1) - record.name = record.name.replace("verifier.SPV", "verifier", 1) - record.name = record.name.replace("gui.qt.main_window.ElectrumWindow", "gui.qt.main_window", 1) + record = _shorten_name_of_logrecord(record) return super().format(record) t@@ -43,6 +40,20 @@ class LogFormatterForConsole(logging.Formatter): console_formatter = LogFormatterForConsole(fmt="%(levelname).1s | %(name)s | %(message)s") +def _shorten_name_of_logrecord(record: logging.LogRecord) -> logging.LogRecord: + record = copy.copy(record) # avoid mutating arg + # strip the main module name from the logger name + if record.name.startswith("electrum."): + record.name = record.name[9:] + # manual map to shorten common module names + record.name = record.name.replace("interface.Interface", "interface", 1) + record.name = record.name.replace("network.Network", "network", 1) + record.name = record.name.replace("synchronizer.Synchronizer", "synchronizer", 1) + record.name = record.name.replace("verifier.SPV", "verifier", 1) + record.name = record.name.replace("gui.qt.main_window.ElectrumWindow", "gui.qt.main_window", 1) + return record + + # enable logs universally (including for other libraries) root_logger = logging.getLogger() root_logger.setLevel(logging.WARNING)