liumaolin
Rename 'src/VoiceDialogue' to 'src/voice_dialogue'.
511ff0c
raw
history blame
2.41 kB
import logging
import sys
from logging.handlers import RotatingFileHandler
from pathlib import Path
def setup_logger(
logger_name: str = "app",
log_file: str = "app.log",
level: int = logging.INFO,
log_format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
max_bytes: int = 5_242_880, # 5MB
backup_count: int = 3
) -> logging.Logger:
"""
Configure and return a logger with both file and console handlers.
Args:
logger_name: Name of the logger
log_file: Path to the log file
level: Logging level
log_format: Format string for log messages
max_bytes: Maximum size of log file before rotation
backup_count: Number of backup files to keep
Returns:
logging.Logger: Configured logger instance
"""
# Create logger
logger = logging.getLogger(logger_name)
logger.setLevel(level)
# Create formatters
formatter = logging.Formatter(log_format)
# Ensure log directory exists
log_path = Path(log_file)
log_path.parent.mkdir(parents=True, exist_ok=True)
# Create and configure file handler with rotation
file_handler = RotatingFileHandler(
log_file,
maxBytes=max_bytes,
backupCount=backup_count,
encoding='utf-8'
)
file_handler.setFormatter(formatter)
file_handler.setLevel(level)
# Create and configure console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)
console_handler.setLevel(level)
# Add handlers to logger if they haven't been added already
if not logger.handlers:
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
# Example usage
if __name__ == "__main__":
# Basic setup
logger = setup_logger()
logger.info("Basic logger initialized")
# Custom setup example
custom_logger = setup_logger(
logger_name="custom_app",
log_file="logs/custom.log",
level=logging.DEBUG,
log_format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
max_bytes=1_048_576, # 1MB
backup_count=5
)
custom_logger.debug("Custom logger initialized")
custom_logger.info("This is an info message")
custom_logger.warning("This is a warning message")
custom_logger.error("This is an error message")