Skip to content

Commit 6a2e1c0

Browse files
committed
Add logg.ErrStopLogEntry
As a way to stop a log entry from being passed on in the log handler chain
1 parent 7a1b4c9 commit 6a2e1c0

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

‎handlers/multi/multi_test.go‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,26 @@ func TestMultiModifyEntry(t *testing.T) {
5151
qt.Assert(t, b.Entries[0].Fields[0].Name, qt.Equals, "initial")
5252
qt.Assert(t, b.Entries[0].Fields[1].Name, qt.Equals, "added")
5353
}
54+
55+
func TestStopEntry(t *testing.T) {
56+
var a logg.HandlerFunc = func(e *logg.Entry) error {
57+
if e.Fields[0].Value == "v2" {
58+
return logg.ErrStopLogEntry
59+
}
60+
return nil
61+
}
62+
63+
b := memory.New()
64+
65+
l := logg.New(
66+
logg.Options{
67+
Level: logg.LevelInfo,
68+
Handler: multi.New(a, b),
69+
})
70+
71+
l.WithLevel(logg.LevelInfo).WithField("v", "v1").Log(logg.String("text"))
72+
l.WithLevel(logg.LevelInfo).WithField("v", "v2").Log(logg.String("text"))
73+
l.WithLevel(logg.LevelInfo).WithField("v", "v3").Log(logg.String("text"))
74+
75+
qt.Assert(t, b.Entries, qt.HasLen, 2)
76+
}

‎logger.go‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ func (l *logger) WithError(err error) *Entry {
137137
return NewEntry(l).WithError(err)
138138
}
139139

140+
// ErrStopLogEntry is a sentinel error that can be returned from a
141+
// handler to stop the entry from being passed to the next handler.
142+
var ErrStopLogEntry = fmt.Errorf("stop log entry")
143+
140144
// log the message, invoking the handler.
141145
func (l *logger) log(e *Entry, s fmt.Stringer) {
142146
if e.Level < l.Level {
@@ -148,6 +152,8 @@ func (l *logger) log(e *Entry, s fmt.Stringer) {
148152
e.finalize(finalized, s.String())
149153

150154
if err := l.Handler.HandleLog(finalized); err != nil {
151-
stdlog.Printf("error logging: %s", err)
155+
if err != ErrStopLogEntry {
156+
stdlog.Printf("error logging: %s", err)
157+
}
152158
}
153159
}

0 commit comments

Comments
 (0)