File size: 1,529 Bytes
100024e |
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 47 48 |
import logging
import os
import sys
from datetime import datetime
def setup_logger(name="ankigen", log_level=logging.INFO):
"""Set up and return a logger with file and console handlers"""
# Create logger
logger = logging.getLogger(name)
logger.setLevel(log_level)
# Remove existing handlers if any
# This ensures that if setup_logger is called multiple times for the same logger name,
# it doesn't accumulate handlers.
if logger.hasHandlers():
logger.handlers.clear()
# Create formatter
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s"
)
# Create console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
# Create file handler
# Logs will be stored in ~/.ankigen/logs/
# A new log file is created each day (e.g., ankigen_20231027.log)
log_dir = os.path.join(os.path.expanduser("~"), ".ankigen", "logs")
os.makedirs(log_dir, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d")
log_file = os.path.join(log_dir, f"{name}_{timestamp}.log")
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
# Create a default logger instance for easy import and use.
# Projects can also create their own named loggers using setup_logger(name="my_module_logger")
logger = setup_logger()
|