@@ -11,15 +11,17 @@ BEGIN
1111 (
1212 Id BIGINT NOT NULL IDENTITY (1 , 1 ), -- 日志主键(高写入场景使用 BIGINT 自增)
1313 StartedAt DATETIME2 (7 ) NOT NULL , -- 请求开始时间(UTC)
14- DurationMs INT NOT NULL , -- 耗时(毫秒)
14+ RequestBodyAt DATETIME2 (7 ) NULL , -- 请求体读取完成时间(UTC)
15+ ResponseHeaderAt DATETIME2 (7 ) NULL , -- 响应头接收完成时间(UTC)
16+ ResponseBodyAt DATETIME2 (7 ) NULL , -- 响应体读取完成时间(UTC)
1517 Direction TINYINT NOT NULL , -- 方向:0=Inbound(用户->后端),1=Outbound(后端->外部)
1618 Source NVARCHAR (100 ) NULL , -- 来源标识;入站可放来源IP,出站可放命名HttpClient或目标来源标签(100 足够覆盖 IPv6 文本)
17- UserId INT NULL , -- 关联用户;但保留索引+外键
18- TraceId NVARCHAR (100 ) NULL , -- 串联键:用于把同一链路日志聚合;按我们约定可直接使用 HttpContext.TraceIdentifier
19+ UserId INT NULL , -- 关联用户;保留索引,不创建外键
20+ TraceId VARCHAR (100 ) NULL , -- 串联键:用于把同一链路日志聚合;按我们约定可直接使用 HttpContext.TraceIdentifier
1921 [Method] VARCHAR (10 ) NOT NULL , -- HTTP 方法(GET/POST/...)
2022 [Url] NVARCHAR (2048 ) NOT NULL , -- 完整 URL;已去掉 Host/Path/Query 拆列,避免冗余字段
21- RequestContentType NVARCHAR (200 ) NULL , -- 请求体 Content-Type
22- ResponseContentType NVARCHAR (200 ) NULL , -- 响应体 Content-Type
23+ RequestContentType VARCHAR (200 ) NULL , -- 请求体 Content-Type
24+ ResponseContentType VARCHAR (200 ) NULL , -- 响应体 Content-Type
2325 StatusCode SMALLINT NULL , -- 响应状态码;无响应异常场景允许为 NULL(不再使用 HasResponse)
2426 ErrorType NVARCHAR (50 ) NULL , -- 异常类型(建议枚举字符串,如 Timeout/Dns/Connect/UnhandledException)
2527 ErrorMessage NVARCHAR (MAX ) NULL , -- 异常详情;inbound 可存 Exception.ToString(),outbound 通常为空
@@ -78,27 +80,19 @@ BEGIN
7880 PRINT N ' -> 索引 IX_RequestTrace_UserId 已存在,跳过' ;
7981 END
8082
81- IF OBJECT_ID (N ' dbo.[User]' , N ' U' ) IS NOT NULL
83+ IF NOT EXISTS (
84+ SELECT 1 FROM sys .indexes
85+ WHERE name = N ' IX_RequestTrace_TraceId'
86+ AND object_id = OBJECT_ID (N ' dbo.RequestTrace' )
87+ )
8288 BEGIN
83- IF NOT EXISTS (SELECT 1 FROM sys .foreign_keys WHERE name = N ' FK_RequestTrace_User' )
84- BEGIN
85- ALTER TABLE dbo .RequestTrace
86- WITH CHECK ADD CONSTRAINT FK_RequestTrace_User
87- FOREIGN KEY (UserId) REFERENCES dbo.[User](Id);
88-
89- ALTER TABLE dbo .RequestTrace
90- CHECK CONSTRAINT FK_RequestTrace_User;
91-
92- PRINT N ' -> 已创建外键 FK_RequestTrace_User' ;
93- END
94- ELSE
95- BEGIN
96- PRINT N ' -> 外键 FK_RequestTrace_User 已存在,跳过' ;
97- END
89+ CREATE INDEX IX_RequestTrace_TraceId
90+ ON dbo .RequestTrace (TraceId);
91+ PRINT N ' -> 已创建索引 IX_RequestTrace_TraceId' ;
9892 END
9993 ELSE
10094 BEGIN
101- PRINT N ' -> dbo.[User] 表不存在 ,跳过 FK_RequestTrace_User 创建 ' ;
95+ PRINT N ' -> 索引 IX_RequestTrace_TraceId 已存在 ,跳过' ;
10296 END
10397
10498END
@@ -119,8 +113,8 @@ BEGIN
119113 CREATE TABLE dbo .RequestTracePayload
120114 (
121115 LogId BIGINT NOT NULL , -- 对应主表 RequestTrace.Id(1:1)
122- RequestHeaders NVARCHAR (MAX ) NOT NULL , -- 请求头原始文本(按原样存储,建议使用 RFC 风格多行 header 文本;由应用层保证写入)
123- ResponseHeaders NVARCHAR (MAX ) NULL , -- 响应头原始文本(按原样存储;无响应时可为空)
116+ RequestHeaders VARCHAR (MAX ) NOT NULL , -- 请求头原始文本(按原样存储,建议使用 RFC 风格多行 header 文本;由应用层保证写入)
117+ ResponseHeaders VARCHAR (MAX ) NULL , -- 响应头原始文本(按原样存储;无响应时可为空)
124118 RequestBody NVARCHAR (MAX ) NULL , -- 请求体文本(可检索、业务友好)
125119 ResponseBody NVARCHAR (MAX ) NULL , -- 响应体文本(可检索、业务友好)
126120 RequestBodyRaw VARBINARY (MAX ) NULL , -- 原始请求体二进制(未解压、未de-chunk、尽量原样;按配置开启)
0 commit comments