Source code for aleph.toolkit.logging
import logging
import sys
from logging.handlers import RotatingFileHandler
from typing import Any, Dict, Optional
[docs]
def setup_logging(
loglevel: int,
filename: Optional[str] = None,
max_log_file_size: Optional[int] = None,
) -> None:
"""
Generic logging setup to be used by all processes.
:param loglevel: Minimum loglevel for emitting messages.
:param filename: Destination file for the logs, if specified. Defaults to stdout.
:param max_log_file_size: Maximum size of the log file. Only applies if filename is specified.
"""
# Some kwargs fiddling is required because basicConfig does not like it when stream
# and handlers are specified at the same time.
kwargs: Dict[str, Any]
if filename:
if not max_log_file_size:
raise ValueError(
"When logging to a log file, a max log file must be specified."
)
file_handler = RotatingFileHandler(
filename, maxBytes=max_log_file_size, backupCount=4
)
# Also log to stderr so subprocess output is visible in docker compose logs
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setLevel(logging.WARNING)
kwargs = {"handlers": [file_handler, stderr_handler]}
else:
kwargs = {"stream": sys.stdout}
logformat = "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
logging.basicConfig(
**kwargs, level=loglevel, format=logformat, datefmt="%Y-%m-%d %H:%M:%S"
)