fix(log): caller 过滤跳过框架 session.go,SQL 日志归因直达业务帧

session 存取中间层不是业务发起点,此前 session 读写触发的 SQL 日志
caller 落在 session.go:29/136,业务帧被挤到 "<-" 之后,Seq 归因噪音大。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-24 01:44:59 +08:00
parent a0719dc72d
commit b951ba027e
2 changed files with 36 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
package log
import "testing"
// isInfrastructureFile 的入参是 shortenPath 后的短路径(最后两段)
func TestIsInfrastructureFile(t *testing.T) {
cases := []struct {
file string
want bool
}{
// hotime 框架的 session/context 属中间层,应跳过
{"hotime@v1.7.302/session.go", true},
{"hotimev1.5/session.go", true},
{"hotime@v1.7.302/context.go", true},
// 框架基础设施目录
{"db/db.go", true},
{"cache/cache_db.go", true},
{"zerolog/log.go", true},
// hotime 根包其余文件不跳过(application.go、code.go 的日志是框架自身行为)
{"hotime@v1.7.302/application.go", false},
{"hotime@v1.7.302/code.go", false},
// 业务侧同名文件不受影响(路径不含 hotime)
{"wx/session.go", false},
{"app/user.go", false},
}
for _, c := range cases {
if got := isInfrastructureFile(c.file); got != c.want {
t.Errorf("isInfrastructureFile(%q) = %v, want %v", c.file, got, c.want)
}
}
}
+5
View File
@@ -890,6 +890,11 @@ func isInfrastructureFile(file string) bool {
if strings.HasSuffix(file, "/context.go") || strings.HasSuffix(file, "\\context.go") {
return true
}
// session.go 是 session 存取中间层,永远不是业务发起点;
// 跳过后 session 读写触发的 SQL 日志 caller 直接落业务帧(而非 session.go:29 <- 业务帧)
if strings.HasSuffix(file, "/session.go") || strings.HasSuffix(file, "\\session.go") {
return true
}
}
return false