logs in db develop
This commit is contained in:
1 parent
a4479696eb
commit
013e130a08
4 files changed
+179
-28
No files matched your search
+6
-22
@@ -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} 条')
|
||||
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user