From 9c78f96902f931383dda12e6f8fdeade2262a010 Mon Sep 17 00:00:00 2001 From: oidq Date: 2026年5月20日 18:42:10 +0200 Subject: [PATCH 1/4] fix: check for nil Out in Logger on Close() * add Logger.Close(), which safely closes underlying Out * should fix #846 --- framework/log/log.go | 9 +++++++++ maddy.go | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/framework/log/log.go b/framework/log/log.go index 3ad291a6..263732a0 100644 --- a/framework/log/log.go +++ b/framework/log/log.go @@ -205,6 +205,15 @@ func (l *Logger) Write(s []byte) (int, error) { return len(s), nil } +// Close closes underlying output in Out. +func (l *Logger) Close() error { + if l.Out == nil { + return nil + } + + return l.Out.Close() +} + // DebugWriter returns a writer that will act like Logger.Write // but will use debug flag on messages. If Logger.Debug is false, // Write method of returned object will be no-op. diff --git a/maddy.go b/maddy.go index c3a560bc..4d7a8179 100644 --- a/maddy.go +++ b/maddy.go @@ -450,7 +450,7 @@ func moduleMain(configPath string) error { c.DefaultLogger.Msg("server stopped") if c.DefaultLogger.Out != nil { - if err := c.DefaultLogger.Out.Close(); err != nil { + if err := c.DefaultLogger.Close(); err != nil { log.DefaultLogger.Error("failed to close output logger", err) } } @@ -517,7 +517,7 @@ func moduleReload(oldContainer *container.C, configPath string, asyncStopWg *syn oldContainer.DefaultLogger.Error("moduleStop failed", err) } oldContainer.DefaultLogger.Msg("old server stopped") - if err := oldContainer.DefaultLogger.Out.Close(); err != nil { + if err := oldContainer.DefaultLogger.Close(); err != nil { newContainer.DefaultLogger.Error("failed to close old server log", err) } From 6200c517c3b3ce95c5f2ba523fc9b911dbc2af51 Mon Sep 17 00:00:00 2001 From: oidq Date: 2026年5月20日 18:48:47 +0200 Subject: [PATCH 2/4] fix(systemd): report READY=1 after reload SystemD would report maddy in "reloading (reload-notify)" state even after successful reload. It should send "READY=1" after finishing the reload. --- maddy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maddy.go b/maddy.go index c3a560bc..952e8354 100644 --- a/maddy.go +++ b/maddy.go @@ -521,7 +521,7 @@ func moduleReload(oldContainer *container.C, configPath string, asyncStopWg *syn newContainer.DefaultLogger.Error("failed to close old server log", err) } - systemdStatus(SDReloading, "Configuration running.") + systemdStatus(SDReady, "Configuration running.") }() return newContainer From 58e8a11423e140ad37063ce8dfc446de4c1591ed Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: 2026年5月24日 01:17:29 +0300 Subject: [PATCH 3/4] maddy 0.9.5 --- .version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version b/.version index a602fc9e..b0bb8785 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.9.4 +0.9.5 From 6bfec6cc7240fec7807829ab34e72f40d8411f19 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: 2026年7月13日 22:55:48 +0300 Subject: [PATCH 4/4] log: Fix logger name duplication in zap adapter --- framework/log/log.go | 15 +++++++++++++++ framework/log/zap.go | 9 +++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/framework/log/log.go b/framework/log/log.go index 263732a0..f17a6a0e 100644 --- a/framework/log/log.go +++ b/framework/log/log.go @@ -251,6 +251,21 @@ func (l *Logger) log(debug bool, s string) { // Logging is disabled - do nothing. } +func (l *Logger) logNameOverwrite(loggerName string, debug bool, s string) { + if loggerName == "" { + loggerName = l.Name + } + if loggerName != "" { + s = loggerName + ": " + s + } + + out := l.output() + out.Write(time.Now(), debug, s) + + // Logging is disabled - do nothing. +} + + func (l *Logger) Sublogger(name string) *Logger { if l.Name != "" && name != "" { name = l.Name + "/" + name diff --git a/framework/log/zap.go b/framework/log/zap.go index 893bf484..4dff1510 100644 --- a/framework/log/zap.go +++ b/framework/log/zap.go @@ -46,9 +46,14 @@ func (l zapLogger) Write(entry zapcore.Entry, fields []zapcore.Field) error { f.AddTo(enc) } if entry.LoggerName != "" { - l.L.Name += "/" + entry.LoggerName + l.L.logNameOverwrite( + l.L.Name+"/"+entry.LoggerName, + entry.Level == zapcore.DebugLevel, + l.L.formatMsg(entry.Message, enc.Fields), + ) + } else { + l.L.log(entry.Level == zapcore.DebugLevel, l.L.formatMsg(entry.Message, enc.Fields)) } - l.L.log(entry.Level == zapcore.DebugLevel, l.L.formatMsg(entry.Message, enc.Fields)) return nil }

AltStyle によって変換されたページ (->オリジナル) /