A context manager for setting up and tearing down logging.
This context manager configures file and console logging handlers.
:yield: None
Source code in dev_tool/log.py
| @contextmanager
def logger() -> Generator[None, Any, None]:
"""
A context manager for setting up and tearing down logging.
This context manager configures file and console logging handlers.
:yield: None
"""
try:
log = logging.getLogger()
log.setLevel(logging.DEBUG)
loggers = [
'httpx',
'httpcore.connection',
'httpcore.http11',
'httpcore.http2',
'urllib3'
]
for logger_name in loggers:
logging.getLogger(logger_name).setLevel(logging.WARNING)
path = STRATUS / 'stratus.log'
path.touch(exist_ok=True)
file_handler = RotatingFileHandler(
filename=path,
encoding='utf-8',
maxBytes=10 * 1024 * 1024,
backupCount=5
)
stream_handler = logging.StreamHandler()
color_formatter = colorlog.ColoredFormatter(
fmt='{log_color}[{asctime}] [{levelname}] {name}: {message}',
datefmt='%Y-%m-%d %I:%M:%S %p',
style='{',
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
},
)
formatter = logging.Formatter(
'[{asctime}] [{levelname}] {name}: {message}',
'%Y-%m-%d %I:%M:%S %p',
style='{',
)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(color_formatter)
stream_handler.setLevel(logging.CRITICAL)
log.addHandler(file_handler)
log.addHandler(stream_handler)
log.propagate = False
yield
finally:
for handler in log.handlers:
handler.close()
log.removeHandler(handler)
|