Source code for simstack.util.setup_logging
import logging
from simstack.util.db_logger import DBLogHandler
[docs]
def setup_logging(
connection_string: str,
db_name: str,
log_level=logging.INFO,
console=True,
log_format: str = "%(asctime)s - %(name)-15s - %(levelname)-10s - %(filename)-20s:%(lineno)4d - %(message)s",
):
"""
Configures the root logger with specified logging level, handlers for both database
and optionally the console.
:param log_format:
:param connection_string: A string representing the database connection.
:param db_name: A name of the database to log into.
:param log_level: Logging verbosity level, defaulting to logging.INFO.
:param console: A boolean indicating whether to log messages to the console.
:return: Configured root logger instance.
"""
# Configure the root logger
root_logger = logging.getLogger()
root_logger.setLevel(log_level)
# Remove any existing handlers to avoid duplicates during reloads
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
# Create formatter
formatter = logging.Formatter(log_format, datefmt="%Y-%m-%d %H:%M:%S")
db_handler = DBLogHandler(connection_string, db_name, "logs")
# Add database handler
db_handler.setLevel(log_level)
db_handler.setFormatter(formatter)
root_logger.addHandler(db_handler)
# Optionally add console handler
if console:
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(log_level)
root_logger.addHandler(console_handler)
return root_logger