Skip to content

Commit 8e070d3

Browse files
committed
Rewrite v5
1 parent 1423005 commit 8e070d3

File tree

11 files changed

+56
-77
lines changed

11 files changed

+56
-77
lines changed

example_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func Example_multiple() {
7373
l.Fatal(ctx, "failed to open stackdriver log file", slog.Error(err))
7474
}
7575

76-
l = slog.Make(l, slogstackdriver.Make(f, nil))
76+
l = slog.Make(l, slogstackdriver.Make(f))
7777

7878
l.Info(ctx, "log to stdout and stackdriver")
7979

export_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package slog
22

3-
func (l *Logger) SetErrorf(fn func(string, ...interface{})) {
4-
l.errorf = fn
5-
}
6-
73
func (l *Logger) SetExit(fn func(int)) {
84
l.exit = fn
95
}

internal/entryhuman/json.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,13 @@ func formatJSON(w io.Writer, buf []byte) []byte {
3030
return buf
3131
}
3232

33-
highlighted, err := colorizeJSON(buf)
34-
if err != nil {
35-
println("humanfmt: failed to colorize fields JSON: " + err.Error())
36-
return buf
37-
}
33+
highlighted, _ := colorizeJSON(buf)
3834
return highlighted
3935
}
4036

4137
func colorizeJSON(buf []byte) ([]byte, error) {
42-
it, err := jsonLexer.Tokenise(nil, string(buf))
43-
if err != nil {
44-
return nil, err
45-
}
46-
38+
it, _ := jsonLexer.Tokenise(nil, string(buf))
4739
b := &bytes.Buffer{}
48-
err = formatters.TTY8.Format(b, style, it)
49-
if err != nil {
50-
return nil, err
51-
}
40+
formatters.TTY8.Format(b, style, it)
5241
return b.Bytes(), nil
5342
}

internal/syncwriter/syncwriter.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,28 @@ import (
1414
type Writer struct {
1515
mu sync.Mutex
1616
w io.Writer
17+
18+
errorf func(f string, v ...interface{})
1719
}
1820

1921
// New returns a new Writer that writes to w.
2022
func New(w io.Writer) *Writer {
2123
return &Writer{
2224
w: w,
25+
26+
errorf: func(f string, v ...interface{}) {
27+
println(fmt.Sprintf(f, v...))
28+
},
2329
}
2430
}
2531

26-
// Write implements io.Writer.
27-
func (w *Writer) Write(p []byte) (int, error) {
32+
func (w *Writer) Write(name string, p []byte) {
2833
w.mu.Lock()
2934
defer w.mu.Unlock()
30-
return w.w.Write(p)
35+
_, err := w.w.Write(p)
36+
if err != nil {
37+
w.errorf("%v: failed to write entry: %+v", name, err)
38+
}
3139
}
3240

3341
type syncer interface {
@@ -58,7 +66,7 @@ func (w *Writer) Sync(sinkName string) {
5866
}
5967
}
6068

61-
println(fmt.Sprintf("failed to sync %v: %+v", sinkName, err))
69+
w.errorf("failed to sync %v: %+v", sinkName, err)
6270
}
6371

6472
func errorsIsAny(err error, errs ...error) bool {

internal/syncwriter/syncwriter_test.go

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,56 @@ package syncwriter
33
import (
44
"bytes"
55
"io"
6+
"os"
67
"testing"
78

89
"cdr.dev/slog/internal/assert"
910
)
1011

12+
type testWriter struct {
13+
w *Writer
14+
errors int
15+
}
16+
1117
func TestWriter_Sync(t *testing.T) {
1218
t.Parallel()
1319

20+
newWriter := func(w io.Writer) *testWriter {
21+
tw := &testWriter{
22+
w: New(w),
23+
}
24+
tw.w.errorf = func(f string, v ...interface{}) {
25+
tw.errors++
26+
}
27+
return tw
28+
}
29+
1430
t.Run("nonSyncWriter", func(t *testing.T) {
1531
t.Parallel()
1632

17-
// w := &Writer{}
18-
// assert.Nil(t, w.Sync(), "syncErr")
33+
tw := newWriter(nil)
34+
tw.w.Sync("test")
35+
assert.Equal(t, 0, tw.errors, "errors")
1936
})
2037

2138
t.Run("syncWriter", func(t *testing.T) {
2239
t.Parallel()
2340

24-
// w := &Writer{
25-
// w: syncWriter{
26-
// sw: func() error {
27-
// return io.EOF
28-
// },
29-
// },
30-
// }
31-
// assert.Equal(t, io.EOF, w.Sync(), "syncErr")
41+
tw := newWriter(syncWriter{
42+
sw: func() error {
43+
return io.EOF
44+
},
45+
})
46+
tw.w.Sync("test")
47+
assert.Equal(t, 1, tw.errors, "errors")
3248
})
3349

3450
t.Run("stdout", func(t *testing.T) {
3551
t.Parallel()
3652

37-
// w := &Writer{
38-
// w: os.Stdout,
39-
// }
40-
// assert.Success(t, w.Sync(), "syncErr")
53+
tw := newWriter(os.Stdout)
54+
tw.w.Sync("test")
55+
assert.Equal(t, 0, tw.errors, "errors")
4156
})
4257
}
4358

slog.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ type Logger struct {
6161
fields Map
6262
level Level
6363

64-
exit func(int)
65-
errorf func(f string, v ...interface{})
64+
exit func(int)
6665
}
6766

6867
// Make creates a logger that writes logs to the passed sinks at LevelInfo.
@@ -72,9 +71,6 @@ func Make(sinks ...Sink) Logger {
7271
level: LevelInfo,
7372

7473
exit: os.Exit,
75-
errorf: func(f string, v ...interface{}) {
76-
println(fmt.Sprintf(f, v...))
77-
},
7874
}
7975
}
8076

sloggers/sloghuman/sloghuman.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package sloghuman // import "cdr.dev/slog/sloggers/sloghuman"
44

55
import (
66
"context"
7-
"fmt"
87
"io"
98
"strings"
109

@@ -47,12 +46,9 @@ func (s humanSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
4746

4847
str = strings.Join(lines, "\n")
4948

50-
_, err := io.WriteString(s.w, str+"\n")
51-
if err != nil {
52-
println(fmt.Sprintf("sloghuman: failed to write entry: %+v", err))
53-
}
49+
s.w.Write("sloghuman", []byte(str+"\n"))
5450
}
5551

5652
func (s humanSink) Sync() {
57-
s.w.Sync("humanSink")
53+
s.w.Sync("sloghuman")
5854
}

sloggers/slogjson/slogjson.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,9 @@ func (s jsonSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
7373
buf, _ := json.Marshal(m)
7474

7575
buf = append(buf, '\n')
76-
_, err := s.w.Write(buf)
77-
if err != nil {
78-
println(fmt.Sprintf("slogjson: failed to write entry: %+v", err))
79-
}
76+
s.w.Write("slogjson", buf)
8077
}
8178

8279
func (s jsonSink) Sync() {
83-
s.w.Sync("jsonSink")
80+
s.w.Sync("slogjson")
8481
}

sloggers/slogjson/slogjson_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ func TestMake(t *testing.T) {
2525
ctx, s := trace.StartSpan(bg, "meow")
2626
b := &bytes.Buffer{}
2727
l := slogjson.Make(b)
28+
l = l.Named("named")
2829
l.Error(ctx, "line1\n\nline2", slog.F("wowow", "me\nyou"))
2930

3031
j := entryjson.Filter(b.String(), "ts")
31-
exp := fmt.Sprintf(`{"level":"ERROR","msg":"line1\n\nline2","caller":"%v:28","func":"cdr.dev/slog/sloggers/slogjson_test.TestMake","trace":"%v","span":"%v","fields":{"wowow":"me\nyou"}}
32+
exp := fmt.Sprintf(`{"level":"ERROR","msg":"line1\n\nline2","caller":"%v:29","func":"cdr.dev/slog/sloggers/slogjson_test.TestMake","component":["named"],"trace":"%v","span":"%v","fields":{"wowow":"me\nyou"}}
3233
`, slogjsonTestFile, s.SpanContext().TraceID, s.SpanContext().SpanID)
3334
assert.Equal(t, exp, j, "entry")
3435
}

sloggers/slogstackdriver/slogstackdriver.go

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,21 @@ import (
1717
"cdr.dev/slog/internal/syncwriter"
1818
)
1919

20-
// Config for the stackdriver logger.
21-
type Config struct {
22-
Labels slog.Map
23-
}
24-
2520
// Make creates a slog.Logger configured to write JSON logs
2621
// to stdout for stackdriver.
2722
//
2823
// See https://cloud.google.com/logging/docs/agent
29-
func Make(w io.Writer, config *Config) slog.Logger {
30-
if config == nil {
31-
config = &Config{}
32-
}
24+
func Make(w io.Writer) slog.Logger {
3325
projectID, _ := metadata.ProjectID()
3426

3527
return slog.Make(stackdriverSink{
3628
projectID: projectID,
3729
w: syncwriter.New(w),
38-
labels: config.Labels,
3930
})
4031
}
4132

4233
type stackdriverSink struct {
4334
projectID string
44-
labels slog.Map
4535
w *syncwriter.Writer
4636
}
4737

@@ -72,19 +62,12 @@ func (s stackdriverSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
7262
)
7363
}
7464

75-
if len(s.labels) > 0 {
76-
e = append(e, slog.F("logging.googleapis.com/labels", s.labels))
77-
}
78-
7965
e = append(e, ent.Fields...)
8066

8167
buf, _ := json.Marshal(e)
8268

8369
buf = append(buf, '\n')
84-
_, err := s.w.Write(buf)
85-
if err != nil {
86-
println(fmt.Sprintf("slogstackdriver: failed to write entry: %+v", err))
87-
}
70+
s.w.Write("slogstackdriver", buf)
8871
}
8972

9073
func (s stackdriverSink) Sync() {

sloggers/slogstackdriver/slogstackdriver_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@ func TestStackdriver(t *testing.T) {
2424

2525
ctx, s := trace.StartSpan(bg, "meow")
2626
b := &bytes.Buffer{}
27-
l := slogstackdriver.Make(b, &slogstackdriver.Config{
28-
Labels: slog.M(slog.F("label", 2)),
29-
})
27+
l := slogstackdriver.Make(b)
3028
l = l.Named("meow")
3129
l.Error(ctx, "line1\n\nline2", slog.F("wowow", "me\nyou"))
3230

3331
j := entryjson.Filter(b.String(), "timestamp")
34-
exp := fmt.Sprintf(`{"severity":"ERROR","message":"line1\n\nline2","logging.googleapis.com/sourceLocation":"file:\"%v\" line:31 function:\"cdr.dev/slog/sloggers/slogstackdriver_test.TestStackdriver\" ","logging.googleapis.com/operation":"producer:\"meow\" ","logging.googleapis.com/trace":"projects//traces/%v","logging.googleapis.com/spanId":"%v","logging.googleapis.com/trace_sampled":false,"logging.googleapis.com/labels":{"label":2},"wowow":"me\nyou"}
32+
exp := fmt.Sprintf(`{"severity":"ERROR","message":"line1\n\nline2","logging.googleapis.com/sourceLocation":"file:\"%v\" line:29 function:\"cdr.dev/slog/sloggers/slogstackdriver_test.TestStackdriver\" ","logging.googleapis.com/operation":"producer:\"meow\" ","logging.googleapis.com/trace":"projects//traces/%v","logging.googleapis.com/spanId":"%v","logging.googleapis.com/trace_sampled":false,"wowow":"me\nyou"}
3533
`, slogstackdriverTestFile, s.SpanContext().TraceID, s.SpanContext().SpanID)
3634
assert.Equal(t, exp, j, "entry")
3735
}

0 commit comments

Comments
 (0)