From a7b13f487631266067dfbe8ffed771eb1d12d189 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 27 Apr 2019 03:42:31 +0200 Subject: [PATCH] logging: make console log lines shorter --- electrum/gui/qt/main_window.py | 3 ++- electrum/logging.py | 26 ++++++++++++++++++++++---- electrum/synchronizer.py | 2 +- electrum/util.py | 3 ++- electrum/verifier.py | 2 +- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index e8cbbf22d..deecc3281 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -322,7 +322,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): return self.top_level_window_recurse(override, test_func) def diagnostic_name(self): - return '{}:{}'.format(self.__class__.__name__, self.wallet.diagnostic_name()) + #return '{}:{}'.format(self.__class__.__name__, self.wallet.diagnostic_name()) + return self.wallet.diagnostic_name() def is_hidden(self): return self.isMinimized() or self.isHidden() diff --git a/electrum/logging.py b/electrum/logging.py index 932b24ad0..27c72a30e 100644 --- a/electrum/logging.py +++ b/electrum/logging.py @@ -11,7 +11,7 @@ import platform from typing import Optional -class LogFormatter(logging.Formatter): +class LogFormatterForFiles(logging.Formatter): def formatTime(self, record, datefmt=None): # timestamps follow ISO 8601 UTC @@ -21,9 +21,27 @@ class LogFormatter(logging.Formatter): return date.strftime(datefmt) -LOG_FORMAT = "%(asctime)22s | %(levelname)8s | %(name)s | %(message)s" -console_formatter = LogFormatter(fmt=LOG_FORMAT) -file_formatter = LogFormatter(fmt=LOG_FORMAT) +file_formatter = LogFormatterForFiles(fmt="%(asctime)22s | %(levelname)8s | %(name)s | %(message)s") + + +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) + return super().format(record) + + +# try to make console log lines short... no timestamp, short levelname, no "electrum." +console_formatter = LogFormatterForConsole(fmt="%(levelname).1s | %(name)s | %(message)s") + # enable logs universally (including for other libraries) root_logger = logging.getLogger() diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index b91865d35..939baca8a 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -132,7 +132,7 @@ class Synchronizer(SynchronizerBase): self.requested_histories = {} def diagnostic_name(self): - return '{}:{}'.format(self.__class__.__name__, self.wallet.diagnostic_name()) + return self.wallet.diagnostic_name() def is_up_to_date(self): return (not self.requested_addrs diff --git a/electrum/util.py b/electrum/util.py index 4d2d95e6f..47c7b7a65 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -342,13 +342,14 @@ def constant_time_compare(val1, val2): # decorator that prints execution time +_profiler_logger = _logger.getChild('profiler') def profiler(func): def do_profile(args, kw_args): name = func.__qualname__ t0 = time.time() o = func(*args, **kw_args) t = time.time() - t0 - _logger.debug(f"[profiler] {name} {t:,.4f}") + _profiler_logger.debug(f"{name} {t:,.4f}") return o return lambda *args, **kw_args: do_profile(args, kw_args) diff --git a/electrum/verifier.py b/electrum/verifier.py index 5e51dc630..9fef9fc98 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -63,7 +63,7 @@ class SPV(NetworkJobOnDefaultServer): await group.spawn(self.main) def diagnostic_name(self): - return '{}:{}'.format(self.__class__.__name__, self.wallet.diagnostic_name()) + return self.wallet.diagnostic_name() async def main(self): self.blockchain = self.network.blockchain()