跳到主要内容

API 访问与异常日志

核验日期:2026-09-18。证据级别:当前源码静态核验 + 测试环境统一只读元数据采集。

物理类型、可空性、默认值、完整索引及约束见 MySQL 实测字典;源码与实库差异见 infra 总览。

infra 集中保存各应用上报的访问与异常日志,application_name 记录来源应用;跨服务上报并不表示每个服务各有一份日志表。

返回 infra 总览。以下列名为 MyBatis 映射或显式 SQL 预期,类型栏是 Java 类型,不推断数据库长度、默认值及可空性;所有 BaseDO 子类均包含总览所列五个继承字段。

业务流程与读写职责​

业务服务上报日志后,ApiAccessLogServiceImpl 先保存请求、结果、耗时及操作者,再留存附件并回填 file_ids。管理端按应用、用户、URL、时间定位操作,用 trace_id 进一步关联异常。异常表保留堆栈定位字段,并用 process_status/process_time/process_user_id 管理处理闭环;访问日志 result_code 不能替代处理状态。历史清理的分批物理 DELETE 与普通软删除不同。

关系与存储规则​

  • trace_id 关联访问日志、异常日志和链路日志;user_id + user_type 表示操作者来源,process_user_id 表示异常处理人,均为逻辑关系。
  • 访问日志 file_ids 用 JacksonTypeHandler 序列化为 JSON 数组,引用 infra_file.id,保留已删除附件 ID;不是独立附件关系表。
  • ApiAccessLogServiceImpl:52 对 request_params 限长 8000;结果提示上限 512 定义于 ApiAccessLogDO:40。服务限长不等于物理 VARCHAR 长度。附件在日志建立后回填(ApiAccessLogServiceImpl:66)。
  • 两个 Mapper 都有按 create_time 分批物理清理的 DELETE(ApiAccessLogMapper:44、ApiErrorLogMapper:41),不能把所有删除都描述为软删除。
  • 日志上报来源属于所有调用方;本整理不读取 request_params、response_body、异常堆栈或附件内容。

infra_api_access_log​

源码:ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java:46。

继承:BaseDO(五个审计/软删除字段见下表末尾)。主键候选为 id(实体主键注解或 MyBatis 约定);二级索引、唯一性和物理外键以实际结构核对,不由字段名推定。

预期列名Java 属性 / 类型业务含义与映射源码行
idid: Long编号46
trace_idtraceId: String链路追踪编号 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。52
user_iduserId: Long用户编号56
user_typeuserType: Integer用户类型 枚举 UserTypeEnum62
application_nameapplicationName: String应用名 目前读取 spring.application.name 配置项68
request_methodrequestMethod: String请求方法名75
request_urlrequestUrl: String访问地址79
request_paramsrequestParams: String请求参数 query: Query String body: Quest Body86
file_idsfileIds: List<Long>成功留存的文件 ID;保留已删除文件的 ID,查询时展示删除标记。旧日志为 NULL。;JacksonTypeHandler JSON 数组89
response_bodyresponseBody: String响应结果93
user_ipuserIp: String用户 IP97
user_agentuserAgent: String浏览器 UA101
operate_moduleoperateModule: String操作模块108
operate_nameoperateName: String操作名112
operate_typeoperateType: Integer操作分类 枚举 OperateTypeEnum118
begin_timebeginTime: LocalDateTime开始请求时间123
end_timeendTime: LocalDateTime结束请求时间127
durationduration: Integer执行时长,单位:毫秒131
result_coderesultCode: Integer结果码 目前使用的 CommonResult#getCode() 属性138
result_msgresultMsg: String结果提示 目前使用的 CommonResult#getMsg() 属性144
create_timecreateTime: LocalDateTime创建时间,INSERT 自动填充BaseDO:30
update_timeupdateTime: LocalDateTime修改时间,INSERT_UPDATE 自动填充BaseDO:35
creatorcreator: String创建者标识,VARCHAR 映射BaseDO:42
updaterupdater: String更新者标识,VARCHAR 映射BaseDO:49
deleteddeleted: Boolean逻辑删除字段BaseDO:54

infra_api_error_log​

源码:ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiErrorLogDO.java:37。

继承:BaseDO(五个审计/软删除字段见下表末尾)。主键候选为 id(实体主键注解或 MyBatis 约定);二级索引、唯一性和物理外键以实际结构核对,不由字段名推定。

预期列名Java 属性 / 类型业务含义与映射源码行
idid: Long编号37
user_iduserId: Long用户编号41
trace_idtraceId: String链路追踪编号 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。47
user_typeuserType: Integer用户类型 枚举 UserTypeEnum53
application_nameapplicationName: String应用名 目前读取 spring.application.name59
request_methodrequestMethod: String请求方法名66
request_urlrequestUrl: String访问地址70
request_paramsrequestParams: String请求参数 query: Query String body: Quest Body77
user_ipuserIp: String用户 IP81
user_agentuserAgent: String浏览器 UA85
exception_timeexceptionTime: LocalDateTime异常发生时间92
exception_nameexceptionName: String异常名 Throwable#getClass() 的类全名98
exception_messageexceptionMessage: String异常导致的消息 cn.hutool.core.exceptions.ExceptionUtil#getMessage(Throwable)104
exception_root_cause_messageexceptionRootCauseMessage: String异常导致的根消息 cn.hutool.core.exceptions.ExceptionUtil#getRootCauseMessage(Throwable)110
exception_stack_traceexceptionStackTrace: String异常的栈轨迹 org.apache.commons.lang3.exception.ExceptionUtils#getStackTrace(Throwable)116
exception_class_nameexceptionClassName: String异常发生的类全名 StackTraceElement#getClassName()122
exception_file_nameexceptionFileName: String异常发生的类文件 StackTraceElement#getFileName()128
exception_method_nameexceptionMethodName: String异常发生的方法名 StackTraceElement#getMethodName()134
exception_line_numberexceptionLineNumber: Integer异常发生的方法所在行 StackTraceElement#getLineNumber()140
process_statusprocessStatus: Integer处理状态 枚举 ApiErrorLogProcessStatusEnum149
process_timeprocessTime: LocalDateTime处理时间153
process_user_idprocessUserId: Long处理用户编号 关联 cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO.SysUserDO#getId()159
create_timecreateTime: LocalDateTime创建时间,INSERT 自动填充BaseDO:30
update_timeupdateTime: LocalDateTime修改时间,INSERT_UPDATE 自动填充BaseDO:35
creatorcreator: String创建者标识,VARCHAR 映射BaseDO:42
updaterupdater: String更新者标识,VARCHAR 映射BaseDO:49
deleteddeleted: Boolean逻辑删除字段BaseDO:54

本次实测对照​

  • infra_api_access_log:26 列,源码字段全部存在;额外物理列 tenant_id。索引:idx_create_time(create_time);PRIMARY(id) 唯一。物理外键:本次元数据未返回。
  • infra_api_error_log:28 列,源码字段全部存在;额外物理列 tenant_id。索引:PRIMARY(id) 唯一。物理外键:本次元数据未返回。

infra_api_access_log.file_ids 本次实测为可空 json;request_params 为 text。两张日志表额外的 tenant_id 由租户拦截器边界解释,不应遗漏于物理字典。

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答