init
This commit is contained in:
73
app/utils/logger.py
Normal file
73
app/utils/logger.py
Normal file
@@ -0,0 +1,73 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
|
||||
import pytz
|
||||
from datetime import datetime
|
||||
|
||||
from app.core.config import get_logging_config
|
||||
|
||||
# 获取日志配置
|
||||
log_config = get_logging_config()
|
||||
|
||||
# 确保日志目录存在
|
||||
os.makedirs(log_config.dir, exist_ok=True)
|
||||
|
||||
# 自定义日志格式化器,使用配置的时区
|
||||
class CustomFormatter(logging.Formatter):
|
||||
def converter(self, timestamp):
|
||||
dt = datetime.fromtimestamp(timestamp)
|
||||
tz = pytz.timezone(log_config.timezone)
|
||||
return dt.replace(tzinfo=pytz.utc).astimezone(tz)
|
||||
|
||||
def formatTime(self, record, datefmt=None):
|
||||
dt = self.converter(record.created)
|
||||
if datefmt:
|
||||
return dt.strftime(datefmt)
|
||||
return dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# 创建日志记录器
|
||||
log = logging.getLogger('app')
|
||||
log.setLevel(getattr(logging, log_config.level))
|
||||
|
||||
# 清除现有处理器
|
||||
for handler in log.handlers[:]:
|
||||
log.removeHandler(handler)
|
||||
|
||||
# 创建控制台处理器
|
||||
console_handler = logging.StreamHandler(sys.stdout)
|
||||
console_handler.setLevel(getattr(logging, log_config.level))
|
||||
console_formatter = CustomFormatter(log_config.format)
|
||||
console_handler.setFormatter(console_formatter)
|
||||
log.addHandler(console_handler)
|
||||
|
||||
# 创建文件处理器 - 按大小轮转
|
||||
file_handler = RotatingFileHandler(
|
||||
os.path.join(log_config.dir, log_config.file),
|
||||
maxBytes=log_config.max_size,
|
||||
backupCount=log_config.backup_count,
|
||||
encoding='utf-8'
|
||||
)
|
||||
file_handler.setLevel(getattr(logging, log_config.level))
|
||||
file_formatter = CustomFormatter(log_config.format)
|
||||
file_handler.setFormatter(file_formatter)
|
||||
log.addHandler(file_handler)
|
||||
|
||||
# 创建文件处理器 - 按日期轮转
|
||||
daily_handler = TimedRotatingFileHandler(
|
||||
os.path.join(log_config.dir, 'app.daily.log'),
|
||||
when='midnight',
|
||||
interval=1,
|
||||
backupCount=log_config.daily_backup_count,
|
||||
encoding='utf-8'
|
||||
)
|
||||
daily_handler.setLevel(getattr(logging, log_config.level))
|
||||
daily_handler.setFormatter(file_formatter)
|
||||
log.addHandler(daily_handler)
|
||||
|
||||
# 防止日志传播到父记录器
|
||||
log.propagate = False
|
||||
|
||||
# 记录启动信息
|
||||
log.info(f"Logger initialized at {datetime.now(pytz.timezone(log_config.timezone)).strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
Reference in New Issue
Block a user