重构日志与可观测性体系
新增单行文本编码器与结构化 GORM 日志,统一错误记录与请求日志策略,收紧日志文件权限并修复按天切分与压缩,支付回调参数脱敏,生产强制阿里云短信,RequestID 校验防注入,日志文案中文化。
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zaptest/observer"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestGormLoggerDoesNotLogQueryParameters(t *testing.T) {
|
||||
core, observed := observer.New(zap.DebugLevel)
|
||||
logger := zap.New(core)
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
|
||||
Logger: newGormLogger("debug", logger),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
type secretRecord struct {
|
||||
ID uint64
|
||||
Phone string
|
||||
}
|
||||
if err := db.AutoMigrate(&secretRecord{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
const secretPhone = "13812345678"
|
||||
if err := db.Create(&secretRecord{Phone: secretPhone}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for _, entry := range observed.All() {
|
||||
for _, value := range entry.ContextMap() {
|
||||
if strings.Contains(valueString(value), secretPhone) {
|
||||
t.Fatalf("query parameter leaked into log: %v", entry.ContextMap())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func valueString(value any) string {
|
||||
if text, ok := value.(string); ok {
|
||||
return text
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in New Issue
Block a user