# import logging # import sys # import os # from datetime import datetime, timedelta # LOG_DIR = "./logs" # 日志文件目录 # LOG_RETENTION_DAYS = 7 # 日志保留天数 # def _remove_old_logs(log_dir, retention_days): # """删除超过保留天数的日志文件""" # if not os.path.exists(log_dir): # os.makedirs(log_dir) # now = datetime.now() # for filename in os.listdir(log_dir): # file_path = os.path.join(log_dir, filename) # if os.path.isfile(file_path) and filename.startswith("run_") and filename.endswith(".log"): # # 提取文件日期 # try: # log_date_str = filename[4:14] # log_date = datetime.strptime(log_date_str, "%Y-%m-%d") # if now - log_date > timedelta(days=retention_days): # os.remove(file_path) # print(f"删除旧日志: {filename}") # except ValueError: # continue # def _reset_logger(log): # """重置日志配置,移除旧的 Handler 并添加新的 Handler""" # for handler in log.handlers: # handler.close() # log.removeHandler(handler) # del handler # log.handlers.clear() # log.propagate = False # # 控制台输出的日志处理器 # console_handle = logging.StreamHandler(sys.stdout) # console_handle.setFormatter( # logging.Formatter( # "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s", # datefmt="%Y-%m-%d %H:%M:%S", # ) # ) # # 生成带有当前日期的日志文件路径 # date_str = datetime.now().strftime("%Y-%m-%d") # log_file_path = os.path.join(LOG_DIR, f"run_{date_str}.log") # # 文件日志处理器 # file_handle = logging.FileHandler(log_file_path, encoding="utf-8") # file_handle.setFormatter( # logging.Formatter( # "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s", # datefmt="%Y-%m-%d %H:%M:%S", # ) # ) # # 将处理器添加到日志 # log.addHandler(file_handle) # log.addHandler(console_handle) # # 删除旧的日志文件 # _remove_old_logs(LOG_DIR, LOG_RETENTION_DAYS) # def setup_logging(): # """设置日志配置""" # log = logging.getLogger("log") # _reset_logger(log) # log.setLevel(logging.INFO) # 日志级别 # return log # def setup_logging(): # """设置日志配置""" # log = logging.getLogger() # 获取 Flask 默认的日志记录器 # _reset_logger(log) # log.setLevel(logging.INFO) # 设置日志级别为 INFO # return log # # 创建日志实例 # logger = setup_logging() # def log_exception(sender, exception, **extra): # """记录异常日志""" # sender.logger.debug('处理过程发生异常: %s', exception) import logging import sys import os from datetime import datetime, timedelta # 日志文件目录 LOG_DIR = "./logs" # 日志保留天数 LOG_RETENTION_DAYS = 7 def _remove_old_logs(log_dir, retention_days): """删除超过保留天数的日志文件""" if not os.path.exists(log_dir): os.makedirs(log_dir) now = datetime.now() for filename in os.listdir(log_dir): file_path = os.path.join(log_dir, filename) if os.path.isfile(file_path) and filename.startswith("run_") and filename.endswith(".log"): # 提取文件日期 try: log_date_str = filename[4:14] log_date = datetime.strptime(log_date_str, "%Y-%m-%d") if now - log_date > timedelta(days=retention_days): os.remove(file_path) print(f"删除旧日志: {filename}") except ValueError: continue def _reset_logger(log): """重置日志配置,移除旧的 Handler 并添加新的 Handler""" for handler in log.handlers: handler.close() log.removeHandler(handler) del handler log.handlers.clear() log.propagate = False # 控制台输出的日志处理器 console_handle = logging.StreamHandler(sys.stdout) console_handle.setFormatter( logging.Formatter( "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) ) # 生成带有当前日期的日志文件路径 date_str = datetime.now().strftime("%Y-%m-%d") log_file_path = os.path.join(LOG_DIR, f"run_{date_str}.log") # 文件日志处理器 file_handle = logging.FileHandler(log_file_path, encoding="utf-8") file_handle.setFormatter( logging.Formatter( "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) ) # 将处理器添加到日志 log.addHandler(file_handle) log.addHandler(console_handle) # 删除旧的日志文件 _remove_old_logs(LOG_DIR, LOG_RETENTION_DAYS) def setup_logging(): """设置日志配置""" log = logging.getLogger() # 获取默认的日志记录器 _reset_logger(log) log.setLevel(logging.INFO) # 设置日志级别为 INFO return log # 创建日志实例 logger = setup_logging() def log_exception(sender, exception, **extra): """记录异常日志""" logger.error(f"处理过程发生异常: {exception}", exc_info=True) # FastAPI 日志配置示例 def configure_fastapi_logging(): """配置 FastAPI 的日志记录""" fastapi_logger = logging.getLogger("uvicorn") _reset_logger(fastapi_logger) fastapi_logger.setLevel(logging.INFO) # Celery 日志配置 def configure_celery_logging(): """配置 Celery 的日志记录""" celery_logger = logging.getLogger("celery") _reset_logger(celery_logger) celery_logger.setLevel(logging.INFO) # Celery RedBeat 日志配置 def configure_redbeat_logging(): """配置 Celery RedBeat 的日志记录""" redbeat_logger = logging.getLogger("redbeat") _reset_logger(redbeat_logger) redbeat_logger.setLevel(logging.INFO) # 配置 FastAPI 日志 configure_fastapi_logging() # 配置 Celery 日志 configure_celery_logging() # 配置 Redbeat 日志 configure_redbeat_logging()