Skip to content

Commit 8e437eb

Browse files
authored
Merge pull request #1158 from pipermerriam/piper/allow-granular-logging-config
Allow granular configuration of logging
2 parents 335c3de + 0e76063 commit 8e437eb

File tree

19 files changed

+234
-59
lines changed

19 files changed

+234
-59
lines changed

eth/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pkg_resources
22
import sys
33

4-
from eth.utils.logging import (
4+
from eth.tools.logging import (
55
setup_trace_logging
66
)
77

eth/db/account.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@
4242
validate_uint256,
4343
validate_canonical_address,
4444
)
45-
46-
from eth.utils.logging import (
45+
from eth.tools.logging import (
4746
TraceLogger
4847
)
4948
from eth.utils.numeric import (

eth/tools/logging.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import logging
2+
from typing import Any
3+
4+
TRACE_LEVEL_NUM = 5
5+
6+
7+
class TraceLogger(logging.Logger):
8+
9+
def trace(self, message: str, *args: Any, **kwargs: Any) -> None:
10+
self.log(TRACE_LEVEL_NUM, message, *args, **kwargs)
11+
12+
13+
def setup_trace_logging() -> None:
14+
logging.setLoggerClass(TraceLogger)
15+
logging.addLevelName(TRACE_LEVEL_NUM, 'TRACE')
16+
setattr(logging, 'TRACE', TRACE_LEVEL_NUM) # typing: ignore

eth/utils/logging.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +0,0 @@
1-
import logging
2-
from typing import Any
3-
4-
TRACE_LEVEL_NUM = 5
5-
6-
7-
class TraceLogger(logging.Logger):
8-
9-
def trace(self, message: str, *args: Any, **kwargs: Any) -> None:
10-
self.log(TRACE_LEVEL_NUM, message, *args, **kwargs)
11-
12-
13-
def setup_trace_logging() -> None:
14-
logging.setLoggerClass(TraceLogger)
15-
logging.addLevelName(TRACE_LEVEL_NUM, 'TRACE')

eth/vm/computation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
Halt,
2727
VMError,
2828
)
29+
from eth.tools.logging import (
30+
TraceLogger
31+
)
2932
from eth.utils.datatypes import (
3033
Configurable,
3134
)
@@ -35,9 +38,6 @@
3538
from eth.utils.numeric import (
3639
ceil32,
3740
)
38-
from eth.utils.logging import (
39-
TraceLogger
40-
)
4141
from eth.validation import (
4242
validate_canonical_address,
4343
validate_is_bytes,

eth/vm/gas_meter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from eth.validation import (
1111
validate_uint256,
1212
)
13-
from eth.utils.logging import (
13+
from eth.tools.logging import (
1414
TraceLogger
1515
)
1616

p2p/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# This is to ensure we call setup_trace_logging() before anything else.
2-
import eth as eth_module # noqa: F401
2+
import eth as _eth_module # noqa: F401

p2p/peer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,9 +1014,9 @@ def _test() -> None:
10141014
"""
10151015
import argparse
10161016
import signal
1017-
from eth.utils.logging import TRACE_LEVEL_NUM
10181017
from eth.chains.ropsten import RopstenChain, ROPSTEN_GENESIS_HEADER, ROPSTEN_VM_CONFIGURATION
10191018
from eth.db.backends.memory import MemoryDB
1019+
from eth.tools.logging import TRACE_LEVEL_NUM
10201020
from trinity.protocol.eth.peer import ETHPeer
10211021
from trinity.protocol.eth.requests import HeaderRequest as ETHHeaderRequest
10221022
from trinity.protocol.les.peer import LESPeer

p2p/service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
cast,
1111
)
1212

13-
from eth.utils.logging import TraceLogger
13+
from eth.tools.logging import TraceLogger
1414

1515
from cancel_token import CancelToken, OperationCancelled
1616

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import pytest
2+
3+
from trinity.cli_parser import (
4+
parser,
5+
LOG_LEVEL_CHOICES,
6+
)
7+
8+
9+
def test_cli_log_level_not_specified():
10+
ns = parser.parse_args([])
11+
assert ns.log_levels is None
12+
13+
14+
@pytest.mark.parametrize(
15+
'level,expected',
16+
LOG_LEVEL_CHOICES.items(),
17+
)
18+
def test_cli_log_level_global_values(level, expected):
19+
ns = parser.parse_args(['--log-level', level])
20+
assert ns.log_levels == {None: expected}
21+
22+
23+
@pytest.mark.parametrize(
24+
'level,expected',
25+
LOG_LEVEL_CHOICES.items(),
26+
)
27+
def test_cli_log_level_module_value(level, expected):
28+
ns = parser.parse_args(['--log-level', "module={0}".format(level)])
29+
assert ns.log_levels == {'module': expected}
30+
31+
32+
def test_cli_log_level_error_for_multiple_globals():
33+
with pytest.raises(SystemExit):
34+
parser.parse_args([
35+
'--log-level', 'DEBUG',
36+
'--log-level', 'modue=DEBUG',
37+
'--log-level', 'ERROR',
38+
])
39+
40+
41+
def test_cli_log_level_error_for_repeated_name():
42+
with pytest.raises(SystemExit):
43+
parser.parse_args([
44+
'--log-level', 'DEBUG',
45+
'--log-level', 'modue_a=DEBUG',
46+
'--log-level', 'modue_b=DEBUG',
47+
'--log-level', 'modue_a=DEBUG',
48+
])

0 commit comments

Comments
 (0)