Files
Logging-System/config/config_test.go
T
weichenandCursor bed0dbf076
ci / vet-and-test (push) Successful in 4s
ci / docker-checkout-hostgateway (push) Successful in 2s
Add a structured logger and collector so runs can be traced across processes.
Sync and async sinks, redaction, and a queryable HTTP service keep concurrent logs tied to a trace id.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 13:51:16 +00:00

83 lines
1.9 KiB
Go

package config
import (
"os"
"path/filepath"
"strings"
"testing"
"logging-system/logsys"
"logging-system/sink"
)
func TestLoadEnvOverridesFile(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "log.json")
raw := []byte(`{
"service": "from-file",
"level": "debug",
"modules": {"engine": "trace"},
"redaction": {"enabled": true},
"sinks": [{"type": "console", "format": "json", "level": "warn"}]
}`)
if err := os.WriteFile(path, raw, 0o644); err != nil {
t.Fatal(err)
}
t.Setenv("LOGSYS_LEVEL", "error")
t.Setenv("LOGSYS_SERVICE", "from-env")
t.Setenv("LOGSYS_REDACT", "off")
cfg, err := Load(path)
if err != nil {
t.Fatal(err)
}
if cfg.Level != "error" || cfg.Service != "from-env" || cfg.Redaction.Enabled {
t.Fatalf("%+v", cfg)
}
if cfg.Modules["engine"] != "trace" || cfg.Trace.Header != "X-Trace-Id" {
t.Fatalf("%+v", cfg)
}
log, err := Build(cfg)
if err != nil {
t.Fatal(err)
}
mem := &sink.Memory{}
log2 := logsys.New(logsys.Options{Service: cfg.Service, Level: logsys.LevelError, Sinks: []logsys.Sink{mem}})
log2.Info("skip")
log2.Error("keep", nil)
if len(mem.Snapshot()) != 1 {
t.Fatal(mem.Snapshot())
}
if err := log.Close(); err != nil {
t.Fatal(err)
}
}
func TestBuildFileSink(t *testing.T) {
dir := t.TempDir()
cfg := Defaults()
cfg.Sinks = []SinkConfig{{
Type: "file",
Path: filepath.Join(dir, "app.jsonl"),
Format: "json",
Rotation: &RotationConfig{MaxBytes: 1024, Keep: 2},
}}
log, err := Build(cfg)
if err != nil {
t.Fatal(err)
}
log.Info("hello", "token", "sk-abcdefghijklmnopqrstuvwxyz")
if err := log.Sync(); err != nil {
t.Fatal(err)
}
if err := log.Close(); err != nil {
t.Fatal(err)
}
data, err := os.ReadFile(filepath.Join(dir, "app.jsonl"))
if err != nil {
t.Fatal(err)
}
if string(data) == "" || strings.Contains(string(data), "sk-abcdefghijklmnopqrstuvwxyz") {
t.Fatalf("redaction failed: %s", data)
}
}