feat: system logs - email log + system log with admin UI
- db: email_logs (sent/failed) + system_logs (info/warn/error) tables, auto-migrated for existing installs - backend/logger.js: logEmail/logSystem with try/catch (never breaks flow) - mailer: log send result (SMTP unconfigured/sent/failed + error msg) - webhook: log blocked-internal, non-2xx response, send failure - server: error middleware records 500 errors to system_logs - routes/logs.js: GET /logs/emails + /logs/system (admin/owner, filters) - UI: 系统日志 page (owner/admin) with system/email tabs + filters - API docs updated
This commit is contained in:
@@ -11,6 +11,7 @@ const App = {
|
||||
{ id: 'notifications', label: '通知配置', icon: 'fa-bell', roles: ['owner'] },
|
||||
{ id: 'templates', label: '邮件模板', icon: 'fa-envelope', roles: ['owner'] },
|
||||
{ id: 'settings', label: '系统设置', icon: 'fa-cog', roles: ['owner'] },
|
||||
{ id: 'logs', label: '系统日志', icon: 'fa-clipboard-list', roles: ['owner','admin'] },
|
||||
{ id: 'export', label: '数据导出', icon: 'fa-download', roles: ['owner'] },
|
||||
],
|
||||
|
||||
@@ -99,6 +100,7 @@ const App = {
|
||||
case 'feature': this.renderMain('更新详情', FeatureDetail, param); break;
|
||||
case 'servers': this.renderMain('服务器管理', ServersPage, param); break;
|
||||
case 'bans': this.renderMain('封禁列表', BansPage, param); break;
|
||||
case 'logs': this.renderMain('系统日志', LogsPage, param); break;
|
||||
default: this.renderMain('控制台', Dashboard, param);
|
||||
}
|
||||
},
|
||||
@@ -178,6 +180,7 @@ window.FeaturesPage = FeaturesPage;
|
||||
window.FeatureDetail = FeatureDetail;
|
||||
window.ServersPage = ServersPage;
|
||||
window.BansPage = BansPage;
|
||||
window.LogsPage = LogsPage;
|
||||
window.LoginPage = LoginPage;
|
||||
window.RegisterPage = RegisterPage;
|
||||
window.HomePage = HomePage;
|
||||
|
||||
Reference in New Issue
Block a user