优化结构

This commit is contained in:
Yvan
2026-08-28 11:51:37 +08:00
parent 5b04998731
commit 33ba777137
25 changed files with 163 additions and 125 deletions
+3
View File
@@ -50,6 +50,9 @@ func (w *DailyWriter) Write(value []byte) (int, error) {
defer w.mu.Unlock()
date := time.Now().Format("2006-01-02")
if w.file == nil || w.date != date {
// Retention is enforced again when a long-lived writer rolls to a new day.
// Running this only on rotation avoids a directory scan for every write.
w.removeExpired()
if w.file != nil {
_ = w.file.Close()
}
+26
View File
@@ -0,0 +1,26 @@
package logging
import (
"os"
"path/filepath"
"testing"
"time"
)
func TestDailyWriterCleansExpiredDirectoriesOnRotation(t *testing.T) {
root := t.TempDir()
writer := NewDailyWriter(root, "application.log", 1)
oldDate := time.Now().AddDate(0, 0, -3).Format("2006-01-02")
oldDir := filepath.Join(root, oldDate)
if err := os.MkdirAll(oldDir, 0o755); err != nil {
t.Fatal(err)
}
writer.date = "2000-01-01"
if _, err := writer.Write([]byte("rotated\n")); err != nil {
t.Fatal(err)
}
_ = writer.Close()
if _, err := os.Stat(oldDir); !os.IsNotExist(err) {
t.Fatalf("expired directory still exists: err=%v", err)
}
}
+1 -6
View File
@@ -460,7 +460,7 @@ func safeModuleName(value string) string {
}, value)
}
// NewZapLogger adapts a Zap core to the slog logger used by Kratos v3.
// newZapHandler adapts a Zap core to the slog handler used by Kratos v3.
// The file layout remains compatible with the administration log viewer.
func newZapHandler(root, filename string, options Options, errorSink *errorSinkState) (slog.Handler, func()) {
file := NewDailyWriter(root, filename, options.RetentionDay)
@@ -538,8 +538,3 @@ func NewReloadableZapLogger(root, filename string, options Options, attrs ...any
logger := kratoslog.NewLogger(handler, kratoslog.WithExtractor(tracing.TraceAttrs)).With(attrs...)
return logger, control
}
func NewZapLogger(root, filename string, options Options, attrs ...any) (*slog.Logger, func()) {
logger, control := NewReloadableZapLogger(root, filename, options, attrs...)
return logger, control.Close
}