You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.6 KiB
Python

import logging
from logging.handlers import TimedRotatingFileHandler
import asyncio
import time
import os
# 确保 logs 目录存在
def ensure_logs_directory():
logs_dir = "logs"
if not os.path.exists(logs_dir):
os.makedirs(logs_dir)
return logs_dir
# 配置日志
def setup_logger(name, log_file, level=logging.INFO):
# 确保 logs 目录存在
ensure_logs_directory()
# 构建完整的日志文件路径
logs_dir = "logs"
full_log_path = os.path.join(logs_dir, log_file)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 创建按时间轮转的文件处理器
handler = TimedRotatingFileHandler(
full_log_path, # 使用完整路径
when="midnight", # 每天午夜轮转
interval=1, # 间隔1天
backupCount=30 # 保留30天的日志
)
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(level)
# 避免重复添加 handler
if not logger.handlers:
logger.addHandler(handler)
return logger
# 创建全局logger实例
logger = setup_logger('hik3d', 'app.log')
def get_logger():
"""
获取全局logger实例
"""
return logger
# 异步写入日志的包装函数
async def async_log(logger, level, message):
# 在线程池中执行日志写入,避免阻塞事件循环
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, getattr(logger, level), message)
# # 使用示例
# logger = setup_logger('my_app', 'app.log')
# 运行
# asyncio.run(main())