Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Tools/c-analyzer/distutils/log.py
12 views
1
"""A simple log mechanism styled after PEP 282."""
2
3
# The class here is styled after PEP 282 so that it could later be
4
# replaced with a standard Python logging implementation.
5
6
DEBUG = 1
7
INFO = 2
8
WARN = 3
9
ERROR = 4
10
FATAL = 5
11
12
import sys
13
14
class Log:
15
16
def __init__(self, threshold=WARN):
17
self.threshold = threshold
18
19
def _log(self, level, msg, args):
20
if level not in (DEBUG, INFO, WARN, ERROR, FATAL):
21
raise ValueError('%s wrong log level' % str(level))
22
23
if level >= self.threshold:
24
if args:
25
msg = msg % args
26
if level in (WARN, ERROR, FATAL):
27
stream = sys.stderr
28
else:
29
stream = sys.stdout
30
try:
31
stream.write('%s\n' % msg)
32
except UnicodeEncodeError:
33
# emulate backslashreplace error handler
34
encoding = stream.encoding
35
msg = msg.encode(encoding, "backslashreplace").decode(encoding)
36
stream.write('%s\n' % msg)
37
stream.flush()
38
39
def log(self, level, msg, *args):
40
self._log(level, msg, args)
41
42
def debug(self, msg, *args):
43
self._log(DEBUG, msg, args)
44
45
def info(self, msg, *args):
46
self._log(INFO, msg, args)
47
48
def warn(self, msg, *args):
49
self._log(WARN, msg, args)
50
51
def error(self, msg, *args):
52
self._log(ERROR, msg, args)
53
54
def fatal(self, msg, *args):
55
self._log(FATAL, msg, args)
56
57
_global_log = Log()
58
log = _global_log.log
59
debug = _global_log.debug
60
info = _global_log.info
61
warn = _global_log.warn
62
error = _global_log.error
63
fatal = _global_log.fatal
64
65