refactor: framework modules log through diary components
- Each module logs through diary.For(<package>): cabana, lagoon, attach, cooler, postcard, beachcomber, lighthouse, centrifugo, flare, phrasebook, wristband, bouncer - App-published *slog.Logger overrides stay first; messages and attributes unchanged - sunscreen: InstallDefault documented as the compatibility entry point; diary wraps every channel - READMEs list diary as a dependency; logging docs: plugins use diary.For
This commit is contained in:
@@ -114,7 +114,7 @@ func TestWelcomeMail(t *testing.T) {
|
||||
| `postcard.Driver` | Delivers a `postcard.RenderedMessage`. |
|
||||
| `postcard.RenderedMessage` | The validated payload a driver transmits: headers, HTML part and text part. |
|
||||
| `postcard.NewMemoryDriver` | In-memory driver; `postcard.MemoryDriver.Messages` returns what was sent. |
|
||||
| `postcard.NewLogDriver` | Driver that logs through a `*slog.Logger` (the default logger when nil). |
|
||||
| `postcard.NewLogDriver` | Driver that logs through a `*slog.Logger` (the postcard component logger when nil). |
|
||||
| `postcard.NewSMTPDriver` | SMTP driver built from a `postcard.SMTPConfig`. |
|
||||
| `postcard.SMTPConfig` | Host, port, credentials, TLS policy and timeout for the SMTP driver. |
|
||||
| `postcard.FailDriver` | Driver whose `postcard.FailDriver.Send` always returns `postcard.FailDriver.Err`. |
|
||||
@@ -150,7 +150,7 @@ mail:
|
||||
|
||||
## Dependencies
|
||||
|
||||
- SummerCMS modules: [backpack](../backpack/README.md), [compass](../compass/README.md), [pact](../pact/README.md).
|
||||
- SummerCMS modules: [backpack](../backpack/README.md), [compass](../compass/README.md), [diary](../diary/README.md) (component logger `postcard` when the app publishes no logger), [pact](../pact/README.md).
|
||||
- Third-party: `github.com/wneessen/go-mail` (SMTP), `github.com/yuin/goldmark` (Markdown).
|
||||
- Standard library: `bytes`, `context`, `embed`, `fmt`, `html/template`, `io/fs`, `log/slog`, `net/mail`, `regexp`, `strings`, `sync`, `text/template`, `time`.
|
||||
- Tests additionally use `github.com/testcontainers/testcontainers-go` (Mailpit container).
|
||||
|
||||
@@ -80,10 +80,11 @@ type LogDriver struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// NewLogDriver logs through log. slog.Default is used when log is nil.
|
||||
// NewLogDriver logs through log. The postcard component logger (diary) is
|
||||
// used when log is nil.
|
||||
func NewLogDriver(log *slog.Logger) *LogDriver {
|
||||
if log == nil {
|
||||
log = slog.Default()
|
||||
log = moduleLog
|
||||
}
|
||||
return &LogDriver{log: log}
|
||||
}
|
||||
|
||||
@@ -9,9 +9,14 @@ import (
|
||||
|
||||
"git.golem15.com/golem15/summercms/modules/backpack"
|
||||
"git.golem15.com/golem15/summercms/modules/compass"
|
||||
"git.golem15.com/golem15/summercms/modules/diary"
|
||||
"git.golem15.com/golem15/summercms/modules/pact"
|
||||
)
|
||||
|
||||
// moduleLog is postcard's logger: records carry component=postcard and follow
|
||||
// log.components.postcard (diary).
|
||||
var moduleLog = diary.For("postcard")
|
||||
|
||||
// Message is the Send contract for plugin callers.
|
||||
type Message struct {
|
||||
Template string
|
||||
@@ -158,7 +163,7 @@ func loggerFromApp(app *backpack.App) *slog.Logger {
|
||||
return log
|
||||
}
|
||||
}
|
||||
return slog.Default()
|
||||
return moduleLog
|
||||
}
|
||||
|
||||
// BootPlugin registers a plugin's declared mail templates and layouts.
|
||||
|
||||
Reference in New Issue
Block a user