Files
protocol_convert_software_BD3/utils/logger.py

73 lines
1.9 KiB
Python
Raw Normal View History

"""
import logging
import os
if not os.path.exists("log"):
os.mkdir("log")
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("log/forward.log", encoding="utf-8"),
logging.StreamHandler()
]
)
logger = logging.getLogger("Forward")
"""
"""
2026/4/18
Tan Mingyan
原生 logging 模块按天切割保留最近 7 自动删除旧日志 的方案零第三方库直接替换即用
"""
import logging
import os
import sys
from logging.handlers import TimedRotatingFileHandler
def get_exe_dir():
"""获取程序根目录(打包+开发都通用)"""
if getattr(sys, 'frozen', False):
return os.path.dirname(sys.executable)
else:
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 日志目录和exe同一级的logs文件夹
log_dir = os.path.join(get_exe_dir(), "logs")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# 日志文件路径
log_file = os.path.join(log_dir, "forward.log")
# 创建 logger
logger = logging.getLogger("ProtocolForward")
logger.setLevel(logging.INFO)
logger.handlers.clear() # 避免重复打印
# 格式
formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
# ====================== 核心:按天分割日志 ======================
# when="midnight" 每天0点切割
# backupCount=7 保留最近7天日志自动删除旧的
file_handler = TimedRotatingFileHandler(
log_file,
when="midnight",
interval=1,
backupCount=7,
encoding="utf-8",
delay=True
)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 控制台打印(可选)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
# 禁止日志传递
logger.propagate = False