73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
"""
|
||
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 |