summaryrefslogtreecommitdiff
path: root/PC/layout/support/logging.py
blob: 30869b949a1c33ec0cfb421ec8c8524cfb8842de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""
Logging support for make_layout.
"""

__author__ = "Steve Dower <steve.dower@python.org>"
__version__ = "3.8"

import logging
import sys

__all__ = []

LOG = None
HAS_ERROR = False


def public(f):
    __all__.append(f.__name__)
    return f


@public
def configure_logger(ns):
    global LOG
    if LOG:
        return

    LOG = logging.getLogger("make_layout")
    LOG.level = logging.DEBUG

    if ns.v:
        s_level = max(logging.ERROR - ns.v * 10, logging.DEBUG)
        f_level = max(logging.WARNING - ns.v * 10, logging.DEBUG)
    else:
        s_level = logging.ERROR
        f_level = logging.INFO

    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(logging.Formatter("{levelname:8s} {message}", style="{"))
    handler.setLevel(s_level)
    LOG.addHandler(handler)

    if ns.log:
        handler = logging.FileHandler(ns.log, encoding="utf-8", delay=True)
        handler.setFormatter(
            logging.Formatter("[{asctime}]{levelname:8s}: {message}", style="{")
        )
        handler.setLevel(f_level)
        LOG.addHandler(handler)


class BraceMessage:
    def __init__(self, fmt, *args, **kwargs):
        self.fmt = fmt
        self.args = args
        self.kwargs = kwargs

    def __str__(self):
        return self.fmt.format(*self.args, **self.kwargs)


@public
def log_debug(msg, *args, **kwargs):
    return LOG.debug(BraceMessage(msg, *args, **kwargs))


@public
def log_info(msg, *args, **kwargs):
    return LOG.info(BraceMessage(msg, *args, **kwargs))


@public
def log_warning(msg, *args, **kwargs):
    return LOG.warning(BraceMessage(msg, *args, **kwargs))


@public
def log_error(msg, *args, **kwargs):
    global HAS_ERROR
    HAS_ERROR = True
    return LOG.error(BraceMessage(msg, *args, **kwargs))


@public
def log_exception(msg, *args, **kwargs):
    global HAS_ERROR
    HAS_ERROR = True
    return LOG.exception(BraceMessage(msg, *args, **kwargs))


@public
def error_was_logged():
    return HAS_ERROR