]>
glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/helpers/logging.py
1 # Copyright 2021 Oliver Smith
2 # SPDX-License-Identifier: GPL-3.0-or-later
4 from logging
.handlers
import RotatingFileHandler
9 class stdout_logger(logging
.StreamHandler
):
11 Write to stdout and to the already opened log file.
15 def emit(self
, record
):
16 # INFO or higher: Write to stdout
17 if self
._args
.quiet
or (
18 record
.levelno
< logging
.INFO
and
19 not self
._args
.details_to_stdout
):
23 msg
= self
.format(record
)
26 stream
.write(self
.terminator
)
29 except (KeyboardInterrupt, SystemExit):
32 self
.handleError(record
)
35 def add_verbose_log_level():
37 Add a new log level "verbose", which is below "debug". Also monkeypatch
38 logging, so it can be used with logging.verbose().
40 This function is based on work by Voitek Zylinski and sleepycal:
41 https://stackoverflow.com/a/20602183
42 All stackoverflow user contributions are licensed as CC-BY-SA:
43 https://creativecommons.org/licenses/by-sa/3.0/
46 logging
.addLevelName(logging
.VERBOSE
, "VERBOSE")
47 logging
.Logger
.verbose
= lambda inst
, msg
, * \
48 args
, **kwargs
: inst
.log(logging
.VERBOSE
, msg
, *args
, **kwargs
)
49 logging
.verbose
= lambda msg
, *args
, **kwargs
: logging
.log(logging
.VERBOSE
,
55 root_logger
= logging
.getLogger()
56 root_logger
.handlers
= []
59 add_verbose_log_level()
60 root_logger
.setLevel(logging
.DEBUG
)
62 root_logger
.setLevel(logging
.VERBOSE
)
64 # Add custom stdout log handler
65 handler
= stdout_logger()
67 handler
.setFormatter(logging
.Formatter("[%(asctime)s] %(message)s",
69 root_logger
.addHandler(handler
)
71 # Add file log handler
72 if args
.action
== "container" and not args
.details_to_stdout
:
73 os
.chmod(args
.log
, 0o644)
74 handler
= RotatingFileHandler(args
.log
, maxBytes
=5*1024*1024)
75 handler
.setFormatter(logging
.Formatter("(%(process)d) [%(asctime)s] %(message)s",
76 datefmt
="%a, %d %b %Y %H:%M:%S"))
77 root_logger
.addHandler(handler
)
80 logger
= logging
.getLogger()
81 logger
.disabled
= True