35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""财务报销自动化工具包"""
|
|
|
|
import io
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
_LOG_FMT = "%(asctime)s [%(levelname)-5s] %(name)s: %(message)s"
|
|
_LOG_DATE_FMT = "%Y-%m-%d %H:%M:%S"
|
|
_LOG_FILE = Path(__file__).resolve().parent.parent / "pipeline.log"
|
|
|
|
|
|
def get_logger(name: str) -> logging.Logger:
|
|
"""获取带时间戳的日志记录器
|
|
|
|
输出格式: 2026-05-24 12:34:56 [INFO ] extractor: 扫描目录: ...
|
|
日志同时输出到终端和项目根目录的 pipeline.log
|
|
"""
|
|
logger = logging.getLogger(name)
|
|
if not logger.handlers:
|
|
logger.setLevel(logging.INFO)
|
|
formatter = logging.Formatter(_LOG_FMT, _LOG_DATE_FMT)
|
|
|
|
# 终端输出
|
|
utf8_stream = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
|
stream_handler = logging.StreamHandler(utf8_stream)
|
|
stream_handler.setFormatter(formatter)
|
|
logger.addHandler(stream_handler)
|
|
|
|
# 文件输出
|
|
file_handler = logging.FileHandler(str(_LOG_FILE), encoding="utf-8")
|
|
file_handler.setFormatter(formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger |