log/functional_test.go

71 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package log_test
import (
"os"
"strings"
"testing"
"time"
"apigo.cc/go/log"
)
func TestSplitTag(t *testing.T) {
logFile := "test_split.log"
// 使用每分钟切分的标签,方便测试 (当然实际可能需要模拟时间,但这里我们可以直接写然后检查文件名)
splitTag := ".200601021504"
conf := log.Config{
Name: "test-split",
Level: "info",
File: logFile,
SplitTag: splitTag,
}
logger := log.NewLogger(conf)
logger.Info("split test message")
// 给异步写入一点时间
time.Sleep(300 * time.Millisecond)
// 预期文件名
expectedFile := logFile + "." + time.Now().Format(splitTag)
if _, err := os.Stat(expectedFile); os.IsNotExist(err) {
t.Errorf("Expected log file %s does not exist", expectedFile)
} else {
// 清理
os.Remove(expectedFile)
}
}
func TestSensitiveDetailed(t *testing.T) {
type SecretLog struct {
log.BaseLog
Password string
SecretKey string
SafeData string
}
entry := log.GetEntry[SecretLog]()
entry.BaseLog.LogType = "secret"
entry.Password = "my_password"
entry.SecretKey = "super_secret"
entry.SafeData = "hello"
// 直接测试 ToArrayBytes
// 注意passed to ToArrayBytes 的 keys 应该是已经过 fixField 处理的
sensitiveKeys := []string{"password", "secretkey"}
buf := log.ToArrayBytes(entry, sensitiveKeys)
result := string(buf)
if strings.Contains(result, "my_password") {
t.Errorf("Sensitive data 'my_password' not masked in: %s", result)
}
if strings.Contains(result, "super_secret") {
t.Errorf("Sensitive data 'super_secret' not masked in: %s", result)
}
if !strings.Contains(result, "hello") {
t.Errorf("Safe data 'hello' should be present in: %s", result)
}
}