diff --git a/log/caller_filter_test.go b/log/caller_filter_test.go new file mode 100644 index 0000000..c946f30 --- /dev/null +++ b/log/caller_filter_test.go @@ -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) + } + } +} diff --git a/log/logger.go b/log/logger.go index 22bbf76..6b23dcc 100644 --- a/log/logger.go +++ b/log/logger.go @@ -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