Parcourir la source

update 日志按照日期分割

YueYunyun il y a 3 mois
Parent
commit
08bc864b9d

+ 36 - 3
README.md

@@ -206,16 +206,22 @@ export ENV=prod
 
   - 日志级别:DEBUG
   - 日志路径:logs/
+  - 日志文件:app\_{time:YYYY-MM-DD}.log(按日期自动分割)
   - 日志保留:7 天
-  - 日志格式:包含时间、级别、文件名和行号
-  - 控制台输出:彩色格式
+  - 日志格式:{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}
+  - 控制台输出:彩色格式(<green>{time}</green> | <level>{level}</level> | <cyan>{module}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>)
+  - 旧日志压缩:自动压缩为 zip 格式
+  - 最大文件大小:10MB
 
 - 生产环境:
   - 日志级别:INFO
   - 日志路径:/var/log/app
+  - 日志文件:app\_{time:YYYY-MM-DD}.log(按日期自动分割)
   - 日志保留:30 天
-  - 日志格式:仅包含时间、级别和消息
+  - 日志格式:{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}
   - 控制台输出:简洁格式
+  - 旧日志压缩:自动压缩为 zip 格式
+  - 最大文件大小:100MB
 
 使用示例:
 
@@ -225,3 +231,30 @@ from app.logger import logger
 logger.info("这是一条信息日志")
 logger.error("这是一条错误日志", exc_info=True)
 ```
+
+## 新增日志功能说明
+
+1. 按日期分割日志文件:
+
+   - 每天生成一个新的日志文件,文件名格式为 app_YYYY-MM-DD.log
+   - 自动处理日志文件切换,无需重启应用
+
+2. 自动清理旧日志:
+
+   - 开发环境保留最近 7 天的日志
+   - 生产环境保留最近 30 天的日志
+   - 超过保留期限的日志文件会被自动删除
+
+3. 日志压缩:
+
+   - 旧日志文件会被自动压缩为 zip 格式保存
+   - 压缩后的文件名格式为 app_YYYY-MM-DD.log.zip
+
+4. 线程安全:
+
+   - 日志写入操作是线程安全的
+   - 支持多线程并发写入日志
+
+5. 异常处理:
+   - 日志初始化失败时会抛出异常
+   - 日志写入失败时会自动重试

+ 5 - 4
SERVER/app/application-dev.yml

@@ -11,10 +11,11 @@ app:
 #   name: question_bank_dev
 
 logging:
-  path: logs
-  retention: 7 # 开发环境保留7天日志
   level: DEBUG # 开发环境记录所有日志
-  format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {file}:{line} | {message}'
-  console_format: '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <cyan>{file}:{line}</cyan> | {message}'
+  path: logs
+  file: app.log
   max_size: 10485760
   backup_count: 5
+  retention_days: 7 # 开发环境保留7天日志
+  format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {file}:{line} | {message}'
+  console_format: '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <cyan>{file}:{line}</cyan> | {message}'

+ 4 - 3
SERVER/app/application-prod.yml

@@ -11,10 +11,11 @@ database:
   name: question_bank_prod
 
 logging:
-  path: /var/log/app
-  retention: 30 # 生产环境保留30天日志
   level: INFO # 生产环境只记录重要日志
+  path: /var/log/app
+  file: app.log
+  backup_count: 30 # 生产环境保留更多备份
+  retention_days: 30 # 生产环境保留30天日志
   format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {message}'
   console_format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {message}'
   max_size: 104857600 # 生产环境日志文件更大
-  backup_count: 30 # 生产环境保留更多备份

+ 2 - 1
SERVER/app/application.yml

@@ -12,9 +12,10 @@ database:
 
 logging:
   level: INFO
+  path: logs
   file: app.log
+  retention_days: 7 # 日志保留天数
   max_size: 10485760
   backup_count: 5
-  path: logs
   format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}'
   console_format: '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <cyan>{module}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>'

+ 1 - 0
SERVER/app/config/config_logging.py

@@ -9,6 +9,7 @@ class LoggingConfig(BaseSettings):
     path: str = "logs"
     max_size: int = 10485760  # 10MB
     backup_count: int = 5
+    retention_days: int = 7  # 日志保留天数
     format: str = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}"
     console_format: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <cyan>{module}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
 

+ 1 - 1
SERVER/app/database/database.py

@@ -54,7 +54,7 @@ class Database:
                             name: str) -> str:
         """生成SQLAlchemy连接字符串"""
         sql = f"mysql+pymysql://{user}:{password}@{host}:{port}/{name}?charset=utf8mb4"
-        logger.debug(f"数据库连接字符串: {sql}")
+        # logger.debug(f"数据库连接字符串: {sql}")
         return sql
 
     @contextmanager

+ 2 - 2
SERVER/app/logger/logging.py

@@ -37,9 +37,9 @@ class Logger:
 
             # 配置日志
             self._logger_id = self._logger.add(
-                log_file,
+                log_file.with_stem(f"{log_file.stem}_{{time:YYYY-MM-DD}}"),
                 rotation="1 day",  # 每天滚动日志
-                retention=f"{config.logging.backup_count} days",
+                retention=f"{config.logging.retention_days} days",
                 level=config.logging.level,
                 format=config.logging.format,
                 encoding="utf-8",

+ 1 - 1
SERVER/app/main.py

@@ -9,7 +9,7 @@ from app.logger import logger
 
 
 def main():
-    logger.info(f"正在启动应用 [{config.app.name}({config.app.version})]")
+    logger.info(f"正在启动应用 [{config.app.name}({config.app.version})]")
     logger.debug(f"调试模式: {config.app.debug}")
 
     # logger.info(f"加载配置文件:\n{config.to_string()}")