Completed
Push — master ( ec9ef8...68626b )
by Jace
15s queued 12s
created

log.helpers.install_additional_formats()   A

Complexity

Conditions 2

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
"""Wrappers to eliminate boilerplate `logging` activities."""
2
3
import logging
4
5
from . filters import relpath_format_filter
6
from . import state
7
8
9
DEFAULT_LEVEL = logging.INFO
10
DEFAULT_FORMAT = "%(levelname)s: %(name)s: %(message)s"
11
VERBOSITY_TO_LEVEL = {
12
    0: logging.ERROR,
13
    1: logging.WARNING,
14
    2: logging.INFO,
15
    3: logging.DEBUG,
16
}
17
18
19
def init(*, reset=False, debug=False, verbosity=None, **kwargs):
20
    if reset:
21
        for handler in logging.root.handlers[:]:
22
            logging.root.removeHandler(handler)
23
24
    custom_format = kwargs.get('format')
25
    if debug:
26
        default_level = logging.DEBUG
27
    elif verbosity is not None:
28
        default_level = VERBOSITY_TO_LEVEL[verbosity]
29
    else:
30
        default_level = DEFAULT_LEVEL
31
32
    kwargs['level'] = kwargs.get('level', default_level)
33
    kwargs['format'] = kwargs.get('format', DEFAULT_FORMAT)
34
    logging.basicConfig(**kwargs)
35
36
    if custom_format:
37
        formatter = logging.Formatter(custom_format)
38
        for handler in logging.root.handlers:
39
            handler.setFormatter(formatter)
40
41
    install_additional_formats(logging.root)
42
43
    state.initialized = True
44
45
46
def install_additional_formats(logger):
47
    for handler in logger.handlers:
48
        handler.addFilter(relpath_format_filter)
49
50
51
def silence(*names, allow_info=False, allow_warning=False, allow_error=False):
52
    if allow_info:
53
        level = logging.INFO
54
    elif allow_warning:
55
        level = logging.WARNING
56
    elif allow_error:
57
        level = logging.ERROR
58
    else:
59
        level = logging.CRITICAL
60
61
    for name in names:
62
        logging.getLogger(name).setLevel(level)
63