|
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_handler = RichHandler( |
|
rich_tracebacks=True, show_time=True, show_level=True, show_path=True |
|
) |
|
rich_handler.setLevel(level=logging.INFO) |
|
|
|
|
|
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 |
|
|