37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import logging
|
|
import os
|
|
from pathlib import Path
|
|
from logging.handlers import RotatingFileHandler
|
|
|
|
_LOGGER = None
|
|
|
|
|
|
def get_log_file() -> Path:
|
|
try:
|
|
tmp = Path(os.getenv("TEMP") or os.getenv("TMP") or ".")
|
|
except Exception:
|
|
tmp = Path(".")
|
|
return tmp / "docx_creator.log"
|
|
|
|
|
|
def get_logger(name: str = "docx_creator") -> logging.Logger:
|
|
global _LOGGER
|
|
if _LOGGER is not None:
|
|
return _LOGGER
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(logging.DEBUG)
|
|
log_file = get_log_file()
|
|
log_file.parent.mkdir(parents=True, exist_ok=True)
|
|
handler = RotatingFileHandler(str(log_file), maxBytes=2 * 1024 * 1024, backupCount=2, encoding="utf-8")
|
|
fmt = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
|
|
handler.setFormatter(fmt)
|
|
logger.addHandler(handler)
|
|
# also log INFO+ to stderr for debugging
|
|
stream = logging.StreamHandler()
|
|
stream.setLevel(logging.INFO) # 改为 INFO 级别
|
|
stream.setFormatter(fmt)
|
|
logger.addHandler(stream)
|
|
_LOGGER = logger
|
|
logger.info("Logger initialized at %s", log_file)
|
|
return logger
|