| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # logger_config.py
- import logging
- # from logging.handlers import RotatingFileHandler <-- 注释掉原来的
- from concurrent_log_handler import ConcurrentRotatingFileHandler # <-- 导入新的处理程序
- import sys
- import os
- # 定义日志文件的路径
- LOG_DIR = 'logs'
- LOG_FILE = os.path.join(LOG_DIR, 'app.log')
- IS_LOGGOER_CONFIG = False
- # 确保日志文件夹存在
- if not os.path.exists(LOG_DIR):
- os.makedirs(LOG_DIR)
- def setup_logging(log_level=logging.INFO):
- """
- 配置项目的日志记录。
- """
- root_logger = logging.getLogger()
- root_logger.setLevel(log_level)
- # 避免重复添加处理程序
- if not root_logger.handlers:
- # 创建文件处理程序 (使用 ConcurrentRotatingFileHandler)
- # 它会在进程间同步,安全地进行日志轮转
- file_handler = ConcurrentRotatingFileHandler(
- LOG_FILE,
- "a", # 使用追加模式 'a'
- maxBytes=1024 * 1024 * 5,
- backupCount=5,
- encoding='utf-8'
- )
- file_handler.setLevel(log_level)
- # 控制台处理程序保持不变
- console_handler = logging.StreamHandler(sys.stdout)
- console_handler.setLevel(log_level)
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- file_handler.setFormatter(formatter)
- console_handler.setFormatter(formatter)
- root_logger.addHandler(file_handler)
- root_logger.addHandler(console_handler)
-
- global IS_LOGGOER_CONFIG
- IS_LOGGOER_CONFIG = True
- def get_logger(name=None):
- """
- 获取一个日志记录器实例。
- """
- if not IS_LOGGOER_CONFIG:
- setup_logging()
- return logging.getLogger(name)
|