Source code for needlestack.servicers.logging
import logging
import logging.handlers
from needlestack.servicers.settings import BaseConfig
[docs]def configure_logger(config: BaseConfig):
"""Configure the base logger using a configuration class.
Sets the log level, debug handler, and file handler.
Args:
config: Config class that defines how to log
"""
logger = logging.getLogger()
logger.setLevel(config.LOG_LEVEL)
if config.DEBUG:
handler = get_debug_handler(config.DEBUG_LOG_FORMAT, config.LOG_FORMAT_DATE)
logger.addHandler(handler)
if config.LOG_FILE:
handler = get_file_handler(
config.LOG_FILE_LOG_FORMAT,
config.LOG_FORMAT_DATE,
config.LOG_FILE,
config.LOG_FILE_MAX_BYTES,
config.LOG_FILE_BACKUPS,
)
logger.addHandler(handler)
[docs]def get_debug_handler(fmt: str, datefmt: str):
"""Get a debug stdout logging handler
Args:
fmt: Logging format string
datefmt: Date format
"""
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(fmt, datefmt))
return handler
[docs]def get_file_handler(
fmt: str, datefmt: str, log_file: str, max_bytes: int, backup_count: int
):
"""Get a rotating file logging handler
Args:
fmt: Logging format string
datefmt: Date format
log_file: Path to log file
max_bytes: Number of builts per log file
backup_count: Number of log files to keep in rotation
"""
handler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=max_bytes, backupCount=backup_count
)
handler.setFormatter(logging.Formatter(fmt, datefmt))
return handler