1 """
2 Logging support for make_layout.
3 """
4
5 __author__ = "Steve Dower <steve.dower@python.org>"
6 __version__ = "3.8"
7
8 import logging
9 import sys
10
11 __all__ = []
12
13 LOG = None
14 HAS_ERROR = False
15
16
17 def public(f):
18 __all__.append(f.__name__)
19 return f
20
21
22 @public
23 def configure_logger(ns):
24 global LOG
25 if LOG:
26 return
27
28 LOG = logging.getLogger("make_layout")
29 LOG.level = logging.DEBUG
30
31 if ns.v:
32 s_level = max(logging.ERROR - ns.v * 10, logging.DEBUG)
33 f_level = max(logging.WARNING - ns.v * 10, logging.DEBUG)
34 else:
35 s_level = logging.ERROR
36 f_level = logging.INFO
37
38 handler = logging.StreamHandler(sys.stdout)
39 handler.setFormatter(logging.Formatter("{levelname:8s} {message}", style="{"))
40 handler.setLevel(s_level)
41 LOG.addHandler(handler)
42
43 if ns.log:
44 handler = logging.FileHandler(ns.log, encoding="utf-8", delay=True)
45 handler.setFormatter(
46 logging.Formatter("[{asctime}]{levelname:8s}: {message}", style="{")
47 )
48 handler.setLevel(f_level)
49 LOG.addHandler(handler)
50
51
52 class ESC[4;38;5;81mBraceMessage:
53 def __init__(self, fmt, *args, **kwargs):
54 self.fmt = fmt
55 self.args = args
56 self.kwargs = kwargs
57
58 def __str__(self):
59 return self.fmt.format(*self.args, **self.kwargs)
60
61
62 @public
63 def log_debug(msg, *args, **kwargs):
64 return LOG.debug(BraceMessage(msg, *args, **kwargs))
65
66
67 @public
68 def log_info(msg, *args, **kwargs):
69 return LOG.info(BraceMessage(msg, *args, **kwargs))
70
71
72 @public
73 def log_warning(msg, *args, **kwargs):
74 return LOG.warning(BraceMessage(msg, *args, **kwargs))
75
76
77 @public
78 def log_error(msg, *args, **kwargs):
79 global HAS_ERROR
80 HAS_ERROR = True
81 return LOG.error(BraceMessage(msg, *args, **kwargs))
82
83
84 @public
85 def log_exception(msg, *args, **kwargs):
86 global HAS_ERROR
87 HAS_ERROR = True
88 return LOG.exception(BraceMessage(msg, *args, **kwargs))
89
90
91 @public
92 def error_was_logged():
93 return HAS_ERROR