35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import logging
|
||
from logging.handlers import RotatingFileHandler
|
||
import os
|
||
|
||
LOG_DIR = "logs"
|
||
LOG_FILE = "app.log"
|
||
LOG_PATH = os.path.join(LOG_DIR, LOG_FILE)
|
||
MAX_BYTES = 5 * 1024 * 1024 # 5MB
|
||
BACKUP_COUNT = 5
|
||
|
||
# 全局共用的 handler,只初始化一次
|
||
_handler = None
|
||
|
||
def setup_logger(name: str, level=logging.INFO) -> logging.Logger:
|
||
global _handler
|
||
|
||
if not os.path.exists(LOG_DIR):
|
||
os.makedirs(LOG_DIR)
|
||
|
||
logger = logging.getLogger(name)
|
||
logger.setLevel(level) # 设置这个 logger 的最低级别
|
||
|
||
# 避免重复添加 handler(只添加一次)
|
||
if not _handler:
|
||
_handler = RotatingFileHandler(LOG_PATH, maxBytes=MAX_BYTES, backupCount=BACKUP_COUNT, encoding='utf-8')
|
||
formatter = logging.Formatter('[%(asctime)s] %(levelname)s [%(name)s] %(message)s')
|
||
_handler.setFormatter(formatter)
|
||
_handler.setLevel(logging.DEBUG) # Handler 设置最低等级,捕获所有内容
|
||
|
||
if not logger.handlers:
|
||
logger.addHandler(_handler)
|
||
logger.propagate = False # 避免日志冒泡打印两遍
|
||
|
||
return logger
|