Skip to content

Commit 6940c42

Browse files
committed
logging: cli options to filter for modules using -v
old style "-v" still works filtering examples: -v=debug,network=error,interface=error // effectively blacklists network and interface -v=warning,network=debug,interface=debug // effectively whitelists network and interface
1 parent 3385a94 commit 6940c42

File tree

12 files changed

+42
-57
lines changed

12 files changed

+42
-57
lines changed

electrum/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .version import ELECTRUM_VERSION
2-
from .util import format_satoshis, set_verbosity
2+
from .util import format_satoshis
33
from .wallet import Wallet
44
from .storage import WalletStorage
55
from .coinchooser import COIN_CHOOSERS

electrum/commands.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -927,9 +927,7 @@ def add_network_options(parser):
927927

928928
def add_global_options(parser):
929929
group = parser.add_argument_group('global options')
930-
# const is for when no argument is given to verbosity
931-
# default is for when the flag is missing
932-
group.add_argument("-v", dest="verbosity", help="Set verbosity filter", default='', const='*', nargs='?')
930+
group.add_argument("-v", dest="verbosity", help="Set verbosity filter", default='')
933931
group.add_argument("-D", "--dir", dest="electrum_path", help="electrum directory")
934932
group.add_argument("-P", "--portable", action="store_true", dest="portable", default=False, help="Use local 'electrum_data' directory")
935933
group.add_argument("-w", "--wallet", dest="wallet_path", help="wallet path")

electrum/gui/stdio.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from decimal import Decimal
22
import getpass
33
import datetime
4+
import logging
45

56
from electrum import WalletStorage, Wallet
6-
from electrum.util import format_satoshis, set_verbosity
7+
from electrum.util import format_satoshis
78
from electrum.bitcoin import is_address, COIN, TYPE_ADDRESS
89
from electrum.transaction import TxOutput
910
from electrum.network import TxBroadcastError, BestEffortRequestFailed
11+
from electrum.logging import console_stderr_handler
1012

1113
_ = lambda x:x # i18n
1214

@@ -30,7 +32,7 @@ def __init__(self, config, daemon, plugins):
3032
self.done = 0
3133
self.last_balance = ""
3234

33-
set_verbosity(False)
35+
console_stderr_handler.setLevel(logging.CRITICAL)
3436

3537
self.str_recipient = ""
3638
self.str_description = ""

electrum/gui/text.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
import locale
66
from decimal import Decimal
77
import getpass
8+
import logging
89

910
import electrum
10-
from electrum.util import format_satoshis, set_verbosity
11+
from electrum.util import format_satoshis
1112
from electrum.bitcoin import is_address, COIN, TYPE_ADDRESS
1213
from electrum.transaction import TxOutput
1314
from electrum.wallet import Wallet
1415
from electrum.storage import WalletStorage
1516
from electrum.network import NetworkParameters, TxBroadcastError, BestEffortRequestFailed
1617
from electrum.interface import deserialize_server
18+
from electrum.logging import console_stderr_handler
1719

1820
_ = lambda x:x # i18n
1921

@@ -52,7 +54,7 @@ def __init__(self, config, daemon, plugins):
5254
self.set_cursor(0)
5355
self.w = curses.newwin(10, 50, 5, 5)
5456

55-
set_verbosity(False)
57+
console_stderr_handler.setLevel(logging.CRITICAL)
5658
self.tab = 0
5759
self.pos = 0
5860
self.popup_pos = 0

electrum/interface.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ def serialize_server(host: str, port: Union[str, int], protocol: str) -> str:
182182

183183

184184
class Interface(Logger):
185-
verbosity_filter = 'i'
186185

187186
def __init__(self, network: 'Network', server: str, proxy: Optional[dict]):
188187
self.ready = asyncio.Future()

electrum/logging.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,31 @@ def _configure_file_logging(log_directory: pathlib.Path):
6464
root_logger.addHandler(file_handler)
6565

6666

67+
def _configure_verbosity(config):
68+
verbosity = config.get('verbosity')
69+
if not verbosity:
70+
return
71+
console_stderr_handler.setLevel(logging.DEBUG)
72+
if verbosity == '*' or not isinstance(verbosity, str):
73+
return
74+
# example verbosity:
75+
# debug,network=error,interface=error // effectively blacklists network and interface
76+
# warning,network=debug,interface=debug // effectively whitelists network and interface
77+
filters = verbosity.split(',')
78+
for filt in filters:
79+
if not filt: continue
80+
items = filt.split('=')
81+
if len(items) == 1:
82+
level = items[0]
83+
electrum_logger.setLevel(level.upper())
84+
elif len(items) == 2:
85+
logger_name, level = items
86+
logger = get_logger(logger_name)
87+
logger.setLevel(level.upper())
88+
else:
89+
raise Exception(f"invalid log filter: {filt}")
90+
91+
6792
# --- External API
6893

6994
def get_logger(name: str) -> logging.Logger:
@@ -73,6 +98,7 @@ def get_logger(name: str) -> logging.Logger:
7398

7499

75100
_logger = get_logger(__name__)
101+
_logger.setLevel(logging.INFO)
76102

77103

78104
class Logger:
@@ -98,8 +124,7 @@ def diagnostic_name(self):
98124

99125

100126
def configure_logging(config):
101-
if config.get('verbosity'):
102-
console_stderr_handler.setLevel(logging.DEBUG)
127+
_configure_verbosity(config)
103128

104129
is_android = 'ANDROID_DATA' in os.environ
105130
if is_android or config.get('disablefilelogging'):

electrum/network.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ class Network(Logger):
223223
"""The Network class manages a set of connections to remote electrum
224224
servers, each connected socket is handled by an Interface() object.
225225
"""
226-
verbosity_filter = 'n'
227226

228227
def __init__(self, config: SimpleConfig=None):
229228
global INSTANCE

electrum/plugin.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747

4848

4949
class Plugins(DaemonThread):
50-
verbosity_filter = 'p'
5150

5251
@profiler
5352
def __init__(self, config: SimpleConfig, gui_name):

electrum/util.py

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -218,29 +218,6 @@ def default(self, obj):
218218
return list(obj)
219219
return super().default(obj)
220220

221-
class PrintError(object):
222-
'''A handy base class'''
223-
verbosity_filter = ''
224-
225-
def diagnostic_name(self):
226-
return ''
227-
228-
def log_name(self):
229-
msg = self.verbosity_filter or self.__class__.__name__
230-
d = self.diagnostic_name()
231-
if d: msg += "][" + d
232-
return "[%s]" % msg
233-
234-
def print_error(self, *msg):
235-
if self.verbosity_filter in verbosity or verbosity == '*':
236-
print_error(self.log_name(), *msg)
237-
238-
def print_stderr(self, *msg):
239-
print_stderr(self.log_name(), *msg)
240-
241-
def print_msg(self, *msg):
242-
print_msg(self.log_name(), *msg)
243-
244221

245222
class ThreadJob(Logger):
246223
"""A job that is run periodically from a thread's main loop. run() is
@@ -282,7 +259,6 @@ def run(self):
282259

283260
class DaemonThread(threading.Thread, Logger):
284261
""" daemon thread that terminates cleanly """
285-
verbosity_filter = 'd'
286262

287263
def __init__(self):
288264
threading.Thread.__init__(self)
@@ -334,19 +310,6 @@ def on_stop(self):
334310
self.logger.info("stopped")
335311

336312

337-
verbosity = ''
338-
def set_verbosity(filters: Union[str, bool]):
339-
global verbosity
340-
if type(filters) is bool: # backwards compat
341-
verbosity = '*' if filters else ''
342-
return
343-
verbosity = filters
344-
345-
346-
def print_error(*args):
347-
if not verbosity: return
348-
print_stderr(*args)
349-
350313
def print_stderr(*args):
351314
args = [str(item) for item in args]
352315
sys.stderr.write(" ".join(args) + "\n")

electrum/wallet.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ class Abstract_Wallet(AddressSynchronizer):
203203

204204
max_change_outputs = 3
205205
gap_limit_for_change = 6
206-
verbosity_filter = 'w'
207206

208207
def __init__(self, storage: WalletStorage):
209208
if storage.requires_upgrade():

electrum/x509.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,5 @@ def load_certificates(ca_path):
345345
if __name__ == "__main__":
346346
import certifi
347347

348-
util.set_verbosity(True)
349348
ca_path = certifi.where()
350349
ca_list, ca_keyID = load_certificates(ca_path)

run_electrum

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ from electrum import SimpleConfig
8383
from electrum.wallet import Wallet
8484
from electrum.storage import WalletStorage, get_derivation_used_for_hw_device_encryption
8585
from electrum.util import print_msg, print_stderr, json_encode, json_decode, UserCancelled
86-
from electrum.util import set_verbosity, InvalidPassword
86+
from electrum.util import InvalidPassword
8787
from electrum.commands import get_parser, known_commands, Commands, config_variables
8888
from electrum import daemon
8989
from electrum import keystore
@@ -277,6 +277,9 @@ if __name__ == '__main__':
277277
sys.argv.append('-h')
278278

279279
# old '-v' syntax
280+
# Due to this workaround that keeps old -v working,
281+
# more advanced usages of -v need to use '-v='.
282+
# e.g. -v=debug,network=warning,interface=error
280283
try:
281284
i = sys.argv.index('-v')
282285
except ValueError:
@@ -324,10 +327,7 @@ if __name__ == '__main__':
324327
if config_options.get('portable'):
325328
config_options['electrum_path'] = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'electrum_data')
326329

327-
# kivy sometimes freezes when we write to sys.stderr
328-
log_verbosity = config_options.get('verbosity') if config_options.get('gui') != 'kivy' else ''
329-
set_verbosity(log_verbosity)
330-
if not log_verbosity:
330+
if not config_options.get('verbosity'):
331331
warnings.simplefilter('ignore', DeprecationWarning)
332332

333333
# check uri

0 commit comments

Comments
 (0)