File size: 1,307 Bytes
3c99d4f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import logging
from datetime import datetime
from pathlib import Path
from rich.logging import RichHandler
def get_logger(log_name: str, log_dir: Path) -> logging.Logger:
"""
Returns a logger with RichHandler and file handler.
Args:
log_name (str): Name prefix for the log file.
log_dir (Path): Directory to store log files.
Returns:
logging.Logger: Configured logger instance.
"""
log_dir.mkdir(parents=True, exist_ok=True)
date_str = datetime.now().strftime(format="%m_%d_%Y")
log_file = log_dir / f"{log_name}_{date_str}.log"
logger = logging.getLogger(name=log_name)
logger.setLevel(level=logging.INFO)
logger.handlers.clear()
# Rich console handler
rich_handler = RichHandler(
rich_tracebacks=True, show_time=True, show_level=True, show_path=True
)
rich_handler.setLevel(level=logging.INFO)
# File handler
file_handler = logging.FileHandler(filename=log_file, encoding="utf-8")
file_handler.setLevel(level=logging.INFO)
formatter = logging.Formatter(
fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s"
)
file_handler.setFormatter(formatter)
logger.addHandler(rich_handler)
logger.addHandler(file_handler)
logger.propagate = False
return logger
|