logs in db develop

This commit is contained in:
qing committed 2026-07-25 21:01:46 +08:00
1 parent a4479696eb
commit 013e130a08
4 files changed
+179 -28

No files matched your search

+6 -22
View File
@@ -120,7 +120,6 @@ def init_log_routes(app, engine, metadata,
max_records=DEFAULT_MAX_RECORDS,
cleanup_interval=DEFAULT_CLEANUP_INTERVAL):
"""把日志蓝图注册到 Flask app,并注入 engine/metadata。"""
print('[logs] 正在初始化日志模块 ...')
app.config['LOG_ENGINE'] = engine
app.config['LOG_METADATA'] = metadata
@@ -129,38 +128,23 @@ def init_log_routes(app, engine, metadata,
app.config['LOG_CLEANUP_INTERVAL'] = cleanup_interval
# 建表 + 反射
count = 0
try:
table = _ensure_logs_table(metadata, engine)
with engine.connect() as conn:
count = conn.execute(
select(func.count()).select_from(table)
).scalar() or 0
print(f'[logs] Logs 表就绪,当前 {count} 条日志')
except Exception as e:
print(f'[logs] 警告: Logs 表初始化失败: {e}')
log_internal(engine, metadata, 'db', 'ERROR',
f'Logs 表初始化失败: {e}')
# 注册路由
app.register_blueprint(bp)
routes = [
'POST /log/ingest',
'POST /log/query',
'POST /log/stats',
'POST /log/purge',
'GET /log/health',
]
for r in routes:
print(f'[logs] 路由注册: {r}')
# 配置摘要
print(f'[logs] 保留策略: {retention_days} 天 / 上限 {max_records} 条')
print(f'[logs] 自动清理: 每 {cleanup_interval} 秒执行一次')
# 启动后台清理线程
_start_cleanup_thread(engine, metadata,
retention_days, max_records, cleanup_interval)
print('[logs] 后台清理线程已启动')
print('[logs] 日志模块初始化完成')
# ── 5.1 推送日志 ──────────────────────────────────────────────────────
@@ -506,6 +490,6 @@ def _do_cleanup(engine, metadata, retention_days, max_records):
conn.commit()
trimmed = trim_result.rowcount
print(f'[logs] 自动清理完成: 过期删除 {expired_deleted} 条, 超量裁剪 {trimmed} 条')
log_internal(engine, metadata, 'db', 'INFO',
f'自动清理: 过期删除 {expired_deleted} 条, 超量裁剪 {trimmed} 条')
if expired_deleted or trimmed:
log_internal(engine, metadata, 'db', 'INFO',
f'自动清理: 过期删除 {expired_deleted} 条, 超量裁剪 {trimmed} 条')
-6
View File
@@ -138,12 +138,6 @@ def execute_structured():
else:
return jsonify({'success': False, 'error': f'不支持的操作: {action}'}), 400
# 记录操作日志(同进程直接写库,无 HTTP 往返,无循环依赖)
log_internal(engine, metadata, 'db', 'INFO',
f'{action} {table_name} OK',
extra={'rowcount': len(result) if isinstance(result, list) else 0,
'client_ip': request.remote_addr})
return jsonify({'success': True, 'data': result})
except SQLAlchemyError as e: