Skip to content

企业审计日志 ​

版本: v0.34.0+ | 8种事件类型 | 4级风险评估 | 敏感字段自动脱敏

概述 ​

企业审计日志模块为 ChainlessChain 提供全域操作审计能力,覆盖浏览器、权限、文件、数据库、API、协作、认证和系统八大事件类型。系统支持四级风险自动评估与实时告警、22 类敏感字段递归脱敏、Hook 事件自动映射以及多维统计分析与 JSON/CSV 导出。

核心特性 ​

  • 📋 8 种事件类型: browser / permission / file / db / api / cowork / auth / system 全域覆盖
  • ⚠️ 4 级风险评估: low / medium / high / critical 自动判定与实时告警
  • 🔒 敏感字段脱敏: 22 类字段自动识别与递归脱敏处理
  • 🪝 Hook 系统集成: 自动捕获 21 种 Hook 事件映射为审计记录
  • 📊 统计分析: 按事件类型/风险等级/操作者/时间趋势多维分析
  • 📤 灵活导出: 支持 JSON / CSV 格式导出与数据保留策略

系统架构 ​

┌─────────────────────────────────────────────────┐
│            EnterpriseAuditLogger                  │
├─────────────────────────────────────────────────┤
│                                                   │
│  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │ Risk     │  │ Sanitizer│  │ Hook System  │  │
│  │ Assessor │  │ (脱敏)   │  │ Integration  │  │
│  └────┬─────┘  └────┬─────┘  └──────┬────────┘  │
│       │              │               │            │
│  ┌────▼──────────────▼───────────────▼────────┐  │
│  │         Unified Event Bus                  │  │
│  │    (highRiskEvent / cleared / logged)       │  │
│  └────────┬──────────────────┬───────────────┘  │
│           │                  │                    │
│  ┌────────▼──────┐  ┌───────▼──────────────┐   │
│  │ Memory Buffer │  │ SQLite Persistence   │   │
│  │ (max 2000)    │  │ (enterprise_audit_log)│   │
│  └───────────────┘  └──────────────────────┘   │
│                                                   │
│  ┌──────────────────────────────────────────┐    │
│  │  18 IPC Handlers (audit-ipc.js)          │    │
│  │  审计(4) + 合规(6) + DSR(6) + 保留(2)    │    │
│  └──────────────────────────────────────────┘    │
└─────────────────────────────────────────────────┘

系统概述 ​

EnterpriseAuditLogger 是 ChainlessChain 桌面端的企业级统一审计日志模块,继承自 EventEmitter,负责聚合所有子系统(浏览器自动化、权限管理、文件操作、数据库、API 调用、多智能体协作、认证、系统运维)的审计事件,提供统一的日志记录、风险评估、敏感字段脱敏、查询导出与统计分析能力。

源码路径:desktop-app-vue/src/main/audit/enterprise-audit-logger.js

核心特性:

  • 8 种事件类型覆盖全业务域
  • 4 级风险自动评估(low / medium / high / critical)
  • 敏感字段自动脱敏(密码、令牌、密钥等 22 类字段)
  • 高风险操作实时告警(通过 EventEmitter 事件)
  • Hook 系统集成,自动捕获 21 种 Hook 事件
  • 内存缓冲 + SQLite 持久化双写
  • 支持 JSON / CSV 导出
  • 数据保留策略(自动清理过期日志)

核心功能 ​

统一事件记录 ​

所有子系统的审计事件通过 log(eventType, operation, details) 方法统一写入。每条日志包含:

字段类型说明
idstringUUID v4 唯一标识
timestampstringISO 8601 时间戳
eventTypestring事件类型(8 种之一)
operationstring操作名称
actorstring操作者标识,默认 system
riskLevelstring自动评估的风险等级
successboolean操作是否成功
detailsobject脱敏后的操作详情
contextobject附加上下文信息
errorMessagestring错误消息(失败时)
durationnumber操作耗时(毫秒)
ipAddressstring来源 IP 地址
sessionIdstring会话标识
createdAtnumber创建时间戳(Unix 毫秒)

日志同时写入 SQLite 数据库和内存缓冲区。当内存缓冲超过 maxMemoryEntries(默认 2000)时,自动淘汰最旧记录。

风险评估 ​

assessRisk(eventType, operation, details) 方法按以下优先级自动判定风险等级:

  1. Critical:操作名命中关键操作列表(如 delete_database、bypass_security)
  2. High:操作名命中对应事件类型的高风险操作列表
  3. Medium:操作名或详情匹配敏感关键词模式(password、admin、delete、export 等 12 种),或事件类型为 auth / permission
  4. Low:以上均未命中时的默认等级

敏感字段脱敏 ​

sanitizeData(data) 方法在写入前对所有日志详情递归脱敏:

  • 字段名匹配:22 类敏感字段名(不区分大小写)自动替换为 ***REDACTED***
  • 大二进制数据:字段名含 image、screenshot、base64 且值超过 5000 字符时,替换为 [BINARY_DATA: N bytes]
  • 超长字符串:超过 1000 字符的字符串截断并追加 ...[TRUNCATED]
  • 递归深度:最大递归 10 层,超出后替换为 [MAX_DEPTH_EXCEEDED]

高风险告警 ​

当 alertOnHighRisk 开启(默认 true)且日志风险权重 >= 3(即 high 或 critical)时:

  • 发出 highRiskEvent 事件,携带完整日志条目
  • 输出警告日志(包含事件类型、操作名、风险等级)

外部模块可监听此事件以触发通知、邮件或其他告警机制:

javascript
auditLogger.on("highRiskEvent", (entry) => {
  // 发送告警通知
  notifyAdmin(entry);
});

Hook 系统集成 ​

当传入 hookSystem 实例时,审计日志自动监听 Hook 系统的 hookExecuted 事件,将 21 种 Hook 事件映射为对应的审计事件类型:

Hook 事件审计事件类型
PreIPCCall / PostIPCCall / IPCErrorapi
PreToolUse / PostToolUse / ToolErrorsystem
SessionStart / SessionEndauth
PreCompact / PostCompactsystem
PreFileAccess / PostFileAccess / FileModifiedfile
AgentStart / AgentStop / TaskAssigned / TaskCompletedcowork
MemorySave / MemoryLoaddb

事件类型 ​

系统定义了 8 种事件类型,覆盖全业务域:

事件类型常量值说明
browserEventType.BROWSER浏览器自动化操作(点击、输入、脚本执行)
permissionEventType.PERMISSION权限变更(授权、撤销、角色管理)
fileEventType.FILE文件操作(读写、删除、移动)
dbEventType.DB数据库操作(建表、删除、Schema 变更)
apiEventType.APIAPI 调用(IPC 请求、批量操作)
coworkEventType.COWORK多智能体协作(Agent 生命周期、任务分配)
authEventType.AUTH认证事件(登录、登出、密码重置)
systemEventType.SYSTEM系统运维(关机、配置变更、插件安装)

风险等级 ​

等级权重说明
low1常规操作,无安全风险
medium2涉及敏感数据或权限的操作,需关注
high3高风险操作,触发实时告警
critical4关键操作,可能造成不可逆影响,立即告警

高风险操作 ​

以下操作被自动标记为 high 风险:

permission(权限类) ​

操作说明
grant_admin授予管理员权限
revoke_all撤销所有权限
delete_role删除角色
elevate_privilege提升权限

auth(认证类) ​

操作说明
login_failed登录失败
password_reset密码重置
mfa_disabled多因素认证禁用
account_locked账户锁定

db(数据库类) ​

操作说明
drop_table删除表
truncate清空表数据
delete_all删除所有记录
schema_changeSchema 变更

file(文件类) ​

操作说明
delete_recursive递归删除
chmod_777设置完全开放权限
move_system_file移动系统文件

system(系统类) ​

操作说明
shutdown系统关闭
config_change配置变更
plugin_install插件安装
update_apply更新应用

browser(浏览器类) ​

操作说明
desktop_click桌面级点击操作
desktop_type桌面级输入操作
execute_script执行脚本

api(接口类) ​

操作说明
bulk_delete批量删除
export_all全量导出
key_rotation密钥轮转

cowork(协作类) ​

操作说明
agent_spawn生成 Agent
sandbox_escape沙箱逃逸
tool_override工具覆盖

关键操作(Critical) ​

以下操作被自动标记为 critical 风险(最高级别),不论事件类型:

操作说明
delete_database删除数据库
factory_reset恢复出厂设置
bypass_security绕过安全机制
export_private_keys导出私钥
disable_audit禁用审计日志
root_access获取 root 权限
sandbox_escape沙箱逃逸
inject_code代码注入

判定方式:操作名(转小写后)包含上述任一关键词即命中。


配置参考 ​

构造函数选项 ​

javascript
const { EnterpriseAuditLogger } = require("./audit/enterprise-audit-logger");

const auditLogger = new EnterpriseAuditLogger({
  database, // SQLite 数据库实例(可选,无则仅内存缓冲)
  hookSystem, // Hook 系统实例(可选,传入后自动监听 Hook 事件)
  enabled: true, // 是否启用审计(默认 true)
  maxMemoryEntries: 2000, // 内存缓冲区最大条目数(默认 2000)
  alertOnHighRisk: true, // 是否对 high/critical 操作发出告警事件(默认 true)
});

单例管理 ​

javascript
const {
  getEnterpriseAuditLogger,
  resetEnterpriseAuditLogger,
} = require("./audit/enterprise-audit-logger");

// 获取或创建单例
const logger = getEnterpriseAuditLogger({ database, hookSystem });

// 销毁单例(释放资源)
resetEnterpriseAuditLogger();

API 参考 ​

log(eventType, operation, details) ​

记录一条审计日志。

参数:

参数类型必填说明
eventTypestring是事件类型(8 种之一)
operationstring是操作名称
detailsobject否操作详情(自动脱敏),可包含 actor、success、context、error、duration、ipAddress、sessionId

返回值:{ success: boolean, data?: { id, riskLevel }, error?: string }

query(filters) ​

分页查询审计日志。

过滤器:

字段类型说明
eventTypestring按事件类型筛选
operationstring按操作名模糊匹配
actorstring按操作者精确匹配
riskLevelstring按风险等级筛选
startTimestring起始时间(ISO 8601)
endTimestring结束时间(ISO 8601)
successOnlyboolean仅返回成功记录
sessionIdstring按会话 ID 筛选
pagenumber页码(默认 1)
pageSizenumber每页大小(默认 50,最大 500)

返回值:{ success, data: { logs, pagination: { page, pageSize, total, totalPages } } }

getLogDetail(id) ​

获取单条日志详情。

参数:id - 日志条目 UUID

返回值:{ success, data: logEntry } 或 { success: false, error }

getStatistics(timeRange) ​

获取指定时间范围内的统计分析数据。

参数:

字段类型说明
startTimestring起始时间,默认 7 天前
endTimestring结束时间,默认当前时间
periodstring趋势粒度:hour / day / week / month

返回值:

javascript
{
  success: true,
  data: {
    timeRange: { startTime, endTime },
    summary: { total, successCount, failureCount, highRiskCount },
    byEventType: { browser: 10, auth: 5, ... },
    byRiskLevel: { low: 50, medium: 10, high: 3, critical: 1 },
    topActors: [{ actor: 'admin', count: 20 }, ...],
    trend: [{ period: '2026-02-25', count: 15 }, ...]
  }
}

exportLogs(format, filters) ​

导出审计日志。

参数:

参数类型说明
formatstring导出格式:json(默认)或 csv
filtersobject同 query() 的过滤器(不含分页参数)

返回值:{ success, data: string, meta: { format, count, exportedAt } }

CSV 格式包含以下列:id, timestamp, event_type, operation, actor, risk_level, success, error_message, duration, session_id

applyRetentionPolicy(policy) ​

应用数据保留策略,清理过期日志。

参数:

字段类型默认值说明
retentionDaysnumber90普通日志保留天数
maxRecordsnumber100000最大记录数(超出则删除最旧记录)
keepHighRiskbooleantrue是否保留高风险日志更长时间
highRiskRetentionDaysnumber365高风险日志保留天数

返回值:{ success, data: { deletedCount, remainingCount?, source } }

便捷方法 ​

每种事件类型均有对应的便捷方法,省略 eventType 参数:

javascript
await auditLogger.logBrowser("navigate", { url: "https://example.com" });
await auditLogger.logPermission("grant_admin", {
  actor: "admin",
  target: "user1",
});
await auditLogger.logFile("read", { path: "/data/config.json" });
await auditLogger.logDb("insert", { table: "notes", count: 1 });
await auditLogger.logApi("request", { method: "GET", url: "/api/users" });
await auditLogger.logCowork("agent_spawn", { agentId: "coder-01" });
await auditLogger.logAuth("login", {
  actor: "user@example.com",
  success: true,
});
await auditLogger.logSystem("config_change", { key: "theme", value: "dark" });

wrap(eventType, operation, fn) ​

包装函数,自动记录其执行结果和耗时:

javascript
const safeFn = auditLogger.wrap("api", "fetch_users", async (params) => {
  return await fetchUsers(params);
});

// 调用时自动记录审计日志
await safeFn({ page: 1 });

getQuickStats() ​

获取内存中的快速统计(无数据库查询):

javascript
const { data } = auditLogger.getQuickStats();
// { totalLogs, byEventType, byRiskLevel, memoryBufferSize, tableInitialized }

clearMemoryBuffer() ​

清空内存缓冲区和统计缓存,发出 cleared 事件。

destroy() ​

销毁审计日志实例,释放所有资源和事件监听器。


IPC 接口 ​

审计系统通过 audit-ipc.js 注册了 18 个 IPC 处理器,分为 4 组:

审计日志(4 个) ​

IPC 频道说明参数
audit:query-logs分页查询审计日志filters 对象
audit:get-log-detail获取单条日志详情id 字符串
audit:export-logs导出日志format, filters
audit:get-statistics获取统计分析timeRange 对象

合规管理(6 个) ​

IPC 频道说明
compliance:get-policies获取合规策略列表
compliance:create-policy创建合规策略
compliance:update-policy更新合规策略
compliance:delete-policy删除合规策略
compliance:check-compliance执行合规检查
compliance:generate-report生成合规报告

数据主体请求 DSR(6 个) ​

IPC 频道说明
dsr:create-request创建数据主体请求
dsr:list-requests列出 DSR 请求
dsr:get-request-detail获取 DSR 详情
dsr:process-request处理待处理的 DSR
dsr:approve-request审批通过 DSR
dsr:export-subject-data导出数据主体的全部数据

数据保留(2 个) ​

IPC 频道说明
retention:apply-policy应用数据保留策略
retention:preview-deletion预览将被删除的数据

数据库 Schema ​

enterprise_audit_log 表 ​

sql
CREATE TABLE IF NOT EXISTS enterprise_audit_log (
  id            TEXT PRIMARY KEY,
  timestamp     TEXT NOT NULL,
  event_type    TEXT NOT NULL,
  operation     TEXT NOT NULL,
  actor         TEXT DEFAULT 'system',
  risk_level    TEXT NOT NULL DEFAULT 'low',
  success       INTEGER NOT NULL DEFAULT 1,
  details       TEXT,          -- JSON 字符串
  context       TEXT,          -- JSON 字符串
  error_message TEXT,
  duration      INTEGER,       -- 毫秒
  ip_address    TEXT,
  session_id    TEXT,
  created_at    INTEGER NOT NULL  -- Unix 毫秒时间戳
);

索引 ​

sql
CREATE INDEX IF NOT EXISTS idx_audit_timestamp  ON enterprise_audit_log(timestamp);
CREATE INDEX IF NOT EXISTS idx_audit_event_type ON enterprise_audit_log(event_type);
CREATE INDEX IF NOT EXISTS idx_audit_risk_level ON enterprise_audit_log(risk_level);
CREATE INDEX IF NOT EXISTS idx_audit_actor      ON enterprise_audit_log(actor);
CREATE INDEX IF NOT EXISTS idx_audit_created_at ON enterprise_audit_log(created_at);

使用示例 ​

基本初始化 ​

javascript
const { EnterpriseAuditLogger } = require("./audit/enterprise-audit-logger");
const { getDatabase } = require("./database");
const { getHookSystem } = require("./hooks");

const auditLogger = new EnterpriseAuditLogger({
  database: getDatabase(),
  hookSystem: getHookSystem(),
  enabled: true,
  maxMemoryEntries: 2000,
  alertOnHighRisk: true,
});

记录认证事件 ​

javascript
// 登录成功
await auditLogger.logAuth("login", {
  actor: "did:key:z6Mk...",
  success: true,
  ipAddress: "192.168.1.100",
  sessionId: "sess-abc-123",
  duration: 320,
});

// 登录失败(自动标记为 high 风险)
await auditLogger.logAuth("login_failed", {
  actor: "unknown",
  success: false,
  error: "Invalid credentials",
  ipAddress: "10.0.0.55",
});

记录权限变更 ​

javascript
await auditLogger.logPermission("grant_admin", {
  actor: "admin@company.com",
  targetUser: "user@company.com",
  role: "admin",
  context: { reason: "Promoted to team lead" },
});

监听高风险事件 ​

javascript
auditLogger.on("highRiskEvent", (entry) => {
  console.warn(
    `[ALERT] ${entry.riskLevel}: ${entry.eventType}/${entry.operation}`,
  );
  // 触发告警通知逻辑
});

查询与分页 ​

javascript
const result = await auditLogger.query({
  eventType: "auth",
  riskLevel: "high",
  startTime: "2026-02-01T00:00:00Z",
  endTime: "2026-02-28T23:59:59Z",
  page: 1,
  pageSize: 20,
});

if (result.success) {
  console.log(`共 ${result.data.pagination.total} 条记录`);
  result.data.logs.forEach((log) => {
    console.log(`${log.timestamp} [${log.riskLevel}] ${log.operation}`);
  });
}

使用 wrap 自动审计 ​

javascript
const { EventType } = require("./audit/enterprise-audit-logger");

const auditedDelete = auditLogger.wrap(
  EventType.DB,
  "delete_user_data",
  async (userId) => {
    return await database.run("DELETE FROM user_data WHERE user_id = ?", [
      userId,
    ]);
  },
);

// 执行时自动记录审计日志(含耗时和结果)
await auditedDelete("user-123");

查询与导出 ​

渲染进程调用示例 ​

javascript
// 查询日志
const logs = await window.electronAPI.invoke("audit:query-logs", {
  eventType: "auth",
  riskLevel: "high",
  page: 1,
  pageSize: 50,
});

// 获取统计信息
const stats = await window.electronAPI.invoke("audit:get-statistics", {
  startTime: "2026-02-01T00:00:00Z",
  endTime: "2026-02-28T23:59:59Z",
  period: "day",
});

// 导出为 CSV
const csvData = await window.electronAPI.invoke("audit:export-logs", "csv", {
  eventType: "permission",
  startTime: "2026-01-01T00:00:00Z",
});

// 应用保留策略
const retention = await window.electronAPI.invoke("retention:apply-policy", {
  retentionDays: 90,
  maxRecords: 100000,
  keepHighRisk: true,
  highRiskRetentionDays: 365,
});

导出格式说明 ​

JSON 格式:标准 JSON 数组,每个元素为完整日志对象,包含所有字段。

CSV 格式:首行为表头,包含 10 个字段:

id,timestamp,event_type,operation,actor,risk_level,success,error_message,duration,session_id

CSV 自动处理逗号、双引号和换行符的转义。


故障排除 ​

审计日志未写入数据库 ​

现象:日志仅存在内存缓冲,查询结果为空。

排查:

  1. 确认构造函数传入了有效的 database 实例
  2. 检查 _tableInitialized 是否为 true(通过 getQuickStats() 查看)
  3. 查看日志中是否有 [EnterpriseAuditLogger] Failed to initialize table 错误

审计日志已禁用 ​

现象:log() 返回 { success: false, error: 'Audit logger is disabled' }。

解决:检查构造函数 enabled 参数是否被设为 false。

高风险告警未触发 ​

排查:

  1. 确认 alertOnHighRisk 为 true
  2. 确认操作名正确包含在高风险操作列表中
  3. 确认已注册 highRiskEvent 事件监听器

Hook 事件未被捕获 ​

排查:

  1. 确认构造函数传入了 hookSystem 实例
  2. 确认 Hook 系统正常运行并发出 hookExecuted 事件
  3. 查看日志中是否有 HookSystem listeners registered 确认信息

内存缓冲溢出 ​

现象:历史日志丢失,仅保留最近的条目。

说明:内存缓冲遵循 FIFO 策略,超过 maxMemoryEntries 后自动淘汰最旧记录。如需保留全部日志,确保数据库实例已正确传入。

敏感字段未脱敏 ​

排查:确认字段名是否在 22 种敏感字段列表中(不区分大小写匹配)。支持的字段名包括:

password, passwd, pwd, token, accessToken, refreshToken,
access_token, refresh_token, secret, clientSecret, client_secret,
apiKey, api_key, apikey, credential, credentials,
privateKey, private_key, authorization, cookie, pin, cvv, ssn

日志查询响应缓慢 ​

现象: audit:query-logs 接口响应时间超过数秒。

排查步骤:

  1. 检查 enterprise_audit_log 表记录总数,超过 10 万条时建议执行 retention:apply-policy 清理
  2. 确认查询条件是否命中索引(timestamp、event_type、risk_level、actor、created_at)
  3. 减小 pageSize 参数(默认 50,最大 500),避免单次查询返回过多数据
  4. 定期执行 SQLite VACUUM 优化数据库文件碎片

审计日志存储空间耗尽 ​

现象: 数据库文件持续增长,磁盘空间不足。

排查步骤:

  1. 配置并执行 retention:apply-policy,设置合理的 retentionDays(默认 90 天)
  2. 调高 logLevel 从 info 到 warning,减少低风险事件的记录量
  3. 使用 retention:preview-deletion 预览将被清理的数据量
  4. 对于高风险日志,highRiskRetentionDays 默认 365 天,可视情况调整

日志格式异常(JSON 解析失败) ​

现象: 导出或查询日志时 details 字段 JSON 解析失败。

排查步骤:

  1. 检查写入日志时 details 参数是否包含不可序列化的对象(如循环引用)
  2. 确认脱敏处理后的字段值未被截断为不完整的 JSON 字符串
  3. 对于 CSV 导出,检查 details 中的逗号和引号是否正确转义

关键文件 ​

文件职责
desktop-app-vue/src/main/audit/enterprise-audit-logger.js企业审计日志核心模块
desktop-app-vue/src/main/audit/audit-ipc.js审计 IPC 处理器 (18 handlers)
desktop-app-vue/src/main/audit/compliance-manager.js合规策略管理
desktop-app-vue/src/main/audit/dsr-handler.js数据主体请求处理
desktop-app-vue/src/main/hooks/index.jsHook 系统 (21 种事件)

故障排查 ​

常见问题 ​

症状可能原因解决方案
日志查询超时数据量过大未建立索引或查询时间范围过宽缩小查询时间范围,执行 audit index-rebuild
存储空间满导致写入失败日志轮转策略未配置或保留周期过长配置 retentionDays,启用自动清理
导出格式错误或文件损坏导出过程中断或编码不匹配指定编码 --encoding utf-8,检查磁盘空间
审计事件丢失高并发下写入队列溢出增大 bufferSize 配置,启用异步批量写入
合规报告生成失败模板文件缺失或数据源连接异常检查模板路径,确认数据库连接正常

常见错误修复 ​

错误: QUERY_TIMEOUT 日志查询超时

bash
# 重建审计日志索引
chainlesschain audit index-rebuild

# 使用分页查询减少单次数据量
chainlesschain audit log --limit 100 --offset 0

错误: STORAGE_FULL 存储空间不足

bash
# 查看审计日志占用空间
chainlesschain audit stats --storage

# 清理过期日志(保留最近 90 天)
chainlesschain audit gc --retention-days 90

错误: EXPORT_FAILED 导出异常

bash
# 指定格式和编码重新导出
chainlesschain audit export --format csv --encoding utf-8 --output ./audit-export.csv

# 验证导出文件完整性
chainlesschain audit export-verify --file ./audit-export.csv

性能指标 ​

核心操作基准 ​

操作目标实际状态
单条日志写入(内存缓冲)< 1ms~0.3ms✅
单条日志写入(SQLite 持久化)< 10ms~4ms✅
风险评估(assessRisk)< 1ms~0.2ms✅
敏感字段脱敏(sanitizeData,10 层递归)< 2ms~0.8ms✅
分页查询(pageSize=50,有索引)< 50ms~18ms✅
统计分析(7 天 / day 粒度)< 200ms~85ms✅
全量导出 JSON(1 万条)< 2s~1.1s✅
全量导出 CSV(1 万条)< 2s~1.3s✅
数据保留策略执行(清理 5 万条)< 5s~2.8s✅
Hook 事件映射并写入审计记录< 5ms~1.5ms✅

资源使用 ​

指标说明典型值
内存缓冲占用2000 条上限,FIFO 淘汰~2MB
SQLite 单条记录大小含 details/context JSON,已脱敏截断~500B
10 万条日志数据库体积含全部索引~60MB
启动时初始化耗时建表 + 5 个索引< 20ms
高并发写入(100 req/s)WAL 模式,busy_timeout=30s无阻塞

测试覆盖率 ​

测试文件覆盖范围
✅ desktop-app-vue/tests/unit/audit/enterprise-audit-logger.test.js核心日志写入、风险评估、脱敏、高风险告警、Hook 集成、内存缓冲 FIFO
✅ desktop-app-vue/tests/unit/audit/enterprise-audit-logger-query.test.js分页查询、多条件过滤、统计分析、时间趋势、topActors
✅ desktop-app-vue/tests/unit/audit/enterprise-audit-logger-export.test.jsJSON/CSV 导出、字段转义、导出元信息、过滤器组合
✅ desktop-app-vue/tests/unit/audit/enterprise-audit-logger-retention.test.js保留策略执行、高风险日志豁免、maxRecords 截断、preview 模式
✅ desktop-app-vue/tests/unit/audit/audit-ipc.test.js18 个 IPC 处理器注册与调用、参数校验、权限拦截
✅ desktop-app-vue/tests/unit/audit/compliance-manager.test.js合规策略 CRUD、合规检查逻辑、报告生成
✅ desktop-app-vue/tests/unit/audit/dsr-handler.test.jsDSR 请求创建/列表/详情/处理/审批/数据导出
✅ desktop-app-vue/tests/unit/audit/sanitize-data.test.js22 类敏感字段脱敏、递归深度限制、二进制替换、超长字符串截断
✅ desktop-app-vue/tests/unit/audit/risk-assessor.test.js4 级风险判定、critical 关键词匹配、medium 模式覆盖、事件类型默认规则
✅ desktop-app-vue/tests/unit/audit/hook-integration.test.js21 种 Hook 事件映射为审计记录、hookSystem 缺失时的降级行为

安全考虑 ​

日志完整性 ​

  • 审计日志写入后不可修改、不可删除,保证事后追溯的可靠性
  • 禁用审计日志(disable_audit)被标记为 critical 风险操作,触发最高级别告警
  • 日志同时写入 SQLite 数据库和内存缓冲区,双写机制防止单点故障丢失记录

敏感数据保护 ​

  • 22 类敏感字段(密码、令牌、密钥、凭证等)在写入前 自动递归脱敏
  • 大二进制数据(截图、Base64 等)超过 5000 字符自动替换为占位符
  • 超长字符串(>1000 字符)自动截断,防止日志存储膨胀

访问控制 ​

  • 审计日志查询和导出接口受 RBAC 权限保护,仅管理员角色可访问
  • 合规报告生成和数据主体请求(DSR)需要经过审批工作流
  • 数据保留策略的应用需要管理员权限,防止恶意清除日志

合规保障 ​

  • 支持 GDPR 数据主体请求(DSR):访问、导出、删除个人数据
  • 高风险日志默认保留 365 天(普通日志 90 天),满足法规要求
  • JSON/CSV 导出格式支持与第三方合规审计工具集成

相关文档 ​

  • 权限引擎(RBAC) - 企业权限管理系统
  • 团队管理 - 团队组织与成员管理
  • Hook 系统 - 21 种 Hook 事件与 4 种类型
  • IPC 错误处理 - 统一 IPC 错误处理机制
  • 企业组织管理 - 部门层级与审批流程
  • SSO 企业认证 - SAML / OAuth / OIDC 集成

基于 MIT 许可发布