mirror of
https://github.com/rs/zerolog
synced 2026-06-08 17:13:30 +00:00
Add forwarding close methods to several writer implementations (#636)
This commit is contained in:
@@ -155,6 +155,15 @@ func (w ConsoleWriter) Write(p []byte) (n int, err error) {
|
|||||||
return len(p), err
|
return len(p), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call the underlying writer's Close method if it is an io.Closer. Otherwise
|
||||||
|
// does nothing.
|
||||||
|
func (w ConsoleWriter) Close() error {
|
||||||
|
if closer, ok := w.Out.(io.Closer); ok {
|
||||||
|
return closer.Close()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// writeFields appends formatted key-value pairs to buf.
|
// writeFields appends formatted key-value pairs to buf.
|
||||||
func (w ConsoleWriter) writeFields(evt map[string]interface{}, buf *bytes.Buffer) {
|
func (w ConsoleWriter) writeFields(evt map[string]interface{}, buf *bytes.Buffer) {
|
||||||
var fields = make([]string, 0, len(evt))
|
var fields = make([]string, 0, len(evt))
|
||||||
|
|||||||
+3
-1
@@ -6,6 +6,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/internal/cbor"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCtx(t *testing.T) {
|
func TestCtx(t *testing.T) {
|
||||||
@@ -93,7 +95,7 @@ func Test_InterfaceLogObjectMarshaler(t *testing.T) {
|
|||||||
|
|
||||||
withLog.Info().Msg("test")
|
withLog.Info().Msg("test")
|
||||||
|
|
||||||
if got, want := buf.String(), `{"level":"info","obj":{"name":"custom_value","age":29},"message":"test"}`+"\n"; got != want {
|
if got, want := cbor.DecodeIfBinaryToString(buf.Bytes()), `{"level":"info","obj":{"name":"custom_value","age":29},"message":"test"}`+"\n"; got != want {
|
||||||
t.Errorf("got %q, want %q", got, want)
|
t.Errorf("got %q, want %q", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ func TestFatal(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
want := "{\"level\":\"fatal\",\"message\":\"test\"}\n"
|
want := "{\"level\":\"fatal\",\"message\":\"test\"}\n"
|
||||||
got := string(slurp)
|
got := cbor.DecodeIfBinaryToString(slurp)
|
||||||
if got != want {
|
if got != want {
|
||||||
t.Errorf("Diode Fatal Test failed. got:%s, want:%s!", got, want)
|
t.Errorf("Diode Fatal Test failed. got:%s, want:%s!", got, want)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,3 +78,12 @@ func (sw syslogWriter) WriteLevel(level Level, p []byte) (n int, err error) {
|
|||||||
n = len(p)
|
n = len(p)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call the underlying writer's Close method if it is an io.Closer. Otherwise
|
||||||
|
// does nothing.
|
||||||
|
func (sw syslogWriter) Close() error {
|
||||||
|
if c, ok := sw.w.(io.Closer); ok {
|
||||||
|
return c.Close()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ func (lw LevelWriterAdapter) WriteLevel(l Level, p []byte) (n int, err error) {
|
|||||||
return lw.Write(p)
|
return lw.Write(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call the underlying writer's Close method if it is an io.Closer. Otherwise
|
||||||
|
// does nothing.
|
||||||
func (lw LevelWriterAdapter) Close() error {
|
func (lw LevelWriterAdapter) Close() error {
|
||||||
if closer, ok := lw.Writer.(io.Closer); ok {
|
if closer, ok := lw.Writer.(io.Closer); ok {
|
||||||
return closer.Close()
|
return closer.Close()
|
||||||
@@ -105,6 +107,9 @@ func (t multiLevelWriter) WriteLevel(l Level, p []byte) (n int, err error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calls close on all the underlying writers that are io.Closers. If any of the
|
||||||
|
// Close methods return an error, the remainder of the closers are not closed
|
||||||
|
// and the error is returned.
|
||||||
func (t multiLevelWriter) Close() error {
|
func (t multiLevelWriter) Close() error {
|
||||||
for _, w := range t.writers {
|
for _, w := range t.writers {
|
||||||
if closer, ok := w.(io.Closer); ok {
|
if closer, ok := w.(io.Closer); ok {
|
||||||
|
|||||||
Reference in New Issue
Block a user