47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
"""Logging configuration."""
|
|
|
|
import logging
|
|
import sys
|
|
from typing import Optional
|
|
|
|
|
|
def setup_logging(log_level: str = "INFO") -> None:
|
|
"""
|
|
Configure logging for the application.
|
|
|
|
Args:
|
|
log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
"""
|
|
# Convert string level to logging constant
|
|
numeric_level = getattr(logging, log_level.upper(), logging.INFO)
|
|
|
|
# Configure root logger
|
|
logging.basicConfig(
|
|
level=numeric_level,
|
|
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
handlers=[
|
|
logging.StreamHandler(sys.stdout)
|
|
]
|
|
)
|
|
|
|
# Set aiogram logger level
|
|
logging.getLogger("aiogram").setLevel(numeric_level)
|
|
|
|
# Reduce verbosity of some libraries
|
|
logging.getLogger("apscheduler").setLevel(logging.WARNING)
|
|
logging.getLogger("asyncio").setLevel(logging.WARNING)
|
|
|
|
|
|
def get_logger(name: str) -> logging.Logger:
|
|
"""
|
|
Get a logger instance.
|
|
|
|
Args:
|
|
name: Logger name (usually __name__)
|
|
|
|
Returns:
|
|
Logger instance
|
|
"""
|
|
return logging.getLogger(name)
|