فهرست منبع

统一日志配置

wangxq 1 ماه پیش
والد
کامیت
5d77b3db76
5فایلهای تغییر یافته به همراه75 افزوده شده و 22 حذف شده
  1. 30 10
      app/__init__.py
  2. 15 0
      app/config/config.py
  3. 6 6
      app/core/data_metric/metric_interface.py
  4. 13 3
      app/scripts/init_db.py
  5. 11 3
      app/scripts/migrate_users.py

+ 30 - 10
app/__init__.py

@@ -47,19 +47,39 @@ def create_app():
 
 def configure_logging(app):
     """Configure logging for the application"""
-    env = os.environ.get('FLASK_ENV', 'development')
-    log_file = f'flask_{env}.log'
+    if not app.config.get('LOG_ENABLED', True):
+        return None
+    
+    log_file = app.config.get('LOG_FILE', f'flask_{app.config["FLASK_ENV"]}.log')
+    log_level_name = app.config.get('LOG_LEVEL', 'INFO')
+    log_level = getattr(logging, log_level_name)
+    log_format = app.config.get('LOG_FORMAT', '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
+    log_encoding = app.config.get('LOG_ENCODING', 'UTF-8')
+    log_to_console = app.config.get('LOG_TO_CONSOLE', True)
     
     logger = logging.getLogger("app")
-    handler = logging.FileHandler(log_file, encoding='UTF-8')
-    handler.setLevel(logging.INFO)
-    logging_format = logging.Formatter(
-        '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
+    logger.setLevel(log_level)
+    
+    # 清除现有处理器,避免重复
+    if logger.handlers:
+        logger.handlers.clear()
+    
+    # 文件处理器
+    handler = logging.FileHandler(log_file, encoding=log_encoding)
+    handler.setLevel(log_level)
+    logging_format = logging.Formatter(log_format)
     handler.setFormatter(logging_format)
-    console = logging.StreamHandler()
-    console.setLevel(logging.INFO)
-    console.setFormatter(logging_format)
     logger.addHandler(handler)
-    logger.addHandler(console)
     
+    # 控制台处理器
+    if log_to_console:
+        console = logging.StreamHandler()
+        console.setLevel(log_level)
+        console.setFormatter(logging_format)
+        logger.addHandler(console)
+    
+    # 设置根日志级别,确保其他模块的日志也受控制
+    logging.basicConfig(level=log_level, format=log_format)
+    
+    app.logger.info(f"日志配置完成: 级别={log_level_name}, 文件={log_file}")
     return logger

+ 15 - 0
app/config/config.py

@@ -45,6 +45,11 @@ class BaseConfig:
     LLM_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
     LLM_MODEL_NAME = "qwen-turbo"
     LLM_API_KEY = os.environ.get('LLM_API_KEY', "sk-86d4622141d74e9a8d7c38ee873c4d91")
+    
+    # 日志基础配置
+    LOG_FORMAT = '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s'
+    LOG_ENCODING = 'UTF-8'
+    LOG_ENABLED = True
 
 class DevelopmentConfig(BaseConfig):
     """Windows 开发环境配置"""
@@ -73,6 +78,11 @@ class DevelopmentConfig(BaseConfig):
     # 开发环境文件路径配置
     UPLOAD_BASE_PATH = 'C:\\tmp\\upload'
     ARCHIVE_BASE_PATH = 'C:\\tmp\\archive'
+    
+    # 开发环境日志配置
+    LOG_LEVEL = 'DEBUG'
+    LOG_FILE = 'flask_development.log'
+    LOG_TO_CONSOLE = True
 
 class ProductionConfig(BaseConfig):
     """Linux 生产环境配置"""
@@ -101,6 +111,11 @@ class ProductionConfig(BaseConfig):
     # 生产环境文件路径配置
     UPLOAD_BASE_PATH = '/data/upload'
     ARCHIVE_BASE_PATH = '/data/archive'
+    
+    # 生产环境日志配置
+    LOG_LEVEL = 'INFO'
+    LOG_FILE = 'flask_production.log'
+    LOG_TO_CONSOLE = False
 
 # 配置字典
 config = {

+ 6 - 6
app/core/data_metric/metric_interface.py

@@ -17,8 +17,8 @@ from app.core.graph.graph_operations import connect_graph
 from app.core.data_resource.resource import get_node_by_id
 from app.services.package_function import get_node, create_or_get_node, relationship_exists
 
-# 配置日志
-logging.basicConfig(filename='metric_interface.log', level=logging.INFO)
+# 使用应用日志
+logger = logging.getLogger("app")
 
 def metric_list(skip_count, page_size, en_name_filter=None,
                 name_filter=None, category_filter=None, time_filter=None, tag_filter=None):
@@ -188,7 +188,7 @@ def id_mertic_graph(id):
             "rootId": item['res'],
         }
 
-    logging.info(res)  # 记录 'res' 变量
+    logger.info(res)  # 记录 'res' 变量
     return res
 
 
@@ -398,7 +398,7 @@ def metric_kinship_graph(nodeid, meta):
             "lines": [record for record in item['lines'] if record['from'] and record['to']],
             "rootId": str(nodeid)
         }
-    logging.info(res)  # 记录 'res' 变量
+    logger.info(res)  # 记录 'res' 变量
     return res
 
 
@@ -468,7 +468,7 @@ def metric_impact_graph(nodeid, meta):
             "lines": [record for record in item['lines'] if record['from'] and record['to']],
             "rootId": item['rootId']
         }
-    logging.info(res)  # 记录 'res' 变量
+    logger.info(res)  # 记录 'res' 变量
     return res
 
 
@@ -550,7 +550,7 @@ def metric_all_graph(nodeid, meta):
             "lines": [record for record in item['lines'] if record['from'] and record['to']],
             "rootId": item['rootId']
         }
-    logging.info(res)  # 记录 'res' 变量
+    logger.info(res)  # 记录 'res' 变量
     return res
 
 

+ 13 - 3
app/scripts/init_db.py

@@ -1,7 +1,9 @@
 #!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
 """
 数据库初始化脚本
-创建用户表和相关索引
+创建必要的数据库表和初始数据
 """
 
 import os
@@ -12,11 +14,19 @@ import logging
 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
 from app.core.system.auth import init_db
+from app.config.config import config, current_env
+
+# 获取配置
+app_config = config[current_env]
 
 # 配置日志
+log_level_name = getattr(app_config, 'LOG_LEVEL', 'INFO')
+log_level = getattr(logging, log_level_name)
+log_format = getattr(app_config, 'LOG_FORMAT', '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+
 logging.basicConfig(
-    level=logging.INFO,
-    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
+    level=log_level,
+    format=log_format
 )
 logger = logging.getLogger(__name__)
 

+ 11 - 3
app/scripts/migrate_users.py

@@ -4,8 +4,8 @@
 将用户数据从JSON文件迁移到PostgreSQL数据库
 """
 
-import os
 import sys
+import os
 import json
 import logging
 import time
@@ -15,11 +15,19 @@ import psycopg2
 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
 from app.core.system.auth import init_db, get_pg_connection, release_pg_connection
+from app.config.config import config, current_env
+
+# 获取配置
+app_config = config[current_env]
 
 # 配置日志
+log_level_name = getattr(app_config, 'LOG_LEVEL', 'INFO')
+log_level = getattr(logging, log_level_name)
+log_format = getattr(app_config, 'LOG_FORMAT', '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+
 logging.basicConfig(
-    level=logging.INFO,
-    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
+    level=log_level,
+    format=log_format
 )
 logger = logging.getLogger(__name__)