Skip to content

操作日志 Log

模块位于 src/core/Log。通过 Application.registry(Log()) 注册后,路由上的 @Log / option.log 才会真正写入 sys_log

异步、不影响主业务

@Log 只声明配置;真正写库在响应发送之后由框架调度:

  1. 业务 Handler 执行完毕并 response.send
  2. finally 里用 setImmediate + void recordOperationLog(...)不 await
  3. 落库失败只 console.error不会改写已返回的业务结果

因此加 @Log 不会拖慢接口耗时(除极短的同步调度开销外)。

注册方式

ts
import Log from '@/core/Log'

Application.registry(Auth({ /* ... */ }))
  .registry(Log())
  // 或 Log({ enabled: true, silent: false, excludeParamNames: ['token'] })
  .start()

未注册时,即使写了 @Log 也不会落库。

装饰器写法

@/core/Application 导入:

ts
import { Log, BusinessType, PostController } from '@/core/Application'

@PostController('/create')
@Log({ title: '创建用户', business: BusinessType.CREATE })
async create(@RequestBody() body: CreateUserDTO) {
  await this.userService.createUser(body)
  return null
}
字段说明默认
title操作标题''
business业务类型序数(见下表)OTHER
oper操作端:OperType.PC / MOBILE / OTHERPC
excludeParamNames额外排除的参数名密码类字段已默认排除
ignoretrue 时本接口不记日志false

BusinessType

常量含义
CREATE0新增
UPDATE1修改
DELETE2删除
READ3详情
LIST4列表/分页
UPLOAD5上传
EXPORT6导出
IMPORT7导入
LOGIN8登录
OTHER9其它

函数式写法

ts
Application.POST('/api/log/page', handler, {
  auth: { roles: ['ROLE_admin'] },
  paramType: ParamType.BODY,
  log: { title: '操作日志分页', business: BusinessType.LIST },
})

log: {} 即启用默认配置。

落库字段

  • 操作人取自 Auth 会话的 username / avatar(登录时建议传入 profile)
  • 常见字段:titleparamsresponsestatustimeLongipurlerrorMessage

管理端查询 / 导出见 Log API

相关章节

基于 VitePress 构建