Skip to content

Commit a44f627

Browse files
authored
Merge pull request #73 from cdr/opencensus
Remove direct coupling of opencensus
2 parents 8f021e1 + 8d8b837 commit a44f627

File tree

9 files changed

+38
-43
lines changed

9 files changed

+38
-43
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ go get cdr.dev/slog
2626
- [Stdlib](https://godoc.org/cdr.dev/slog#Stdlib) log adapter
2727
- Skip caller frames with [slog.Helper](https://godoc.org/cdr.dev/slog#Helper)
2828
- Encodes values as if with `json.Marshal`
29-
- Transparently log [opencensus](https://godoc.org/go.opencensus.io/trace) trace and span IDs
30-
- [Single dependency](https://godoc.org/cdr.dev/slog?imports) on go.opencensus.io
29+
- Transparently log [opencensus](https://godoc.org/go.opencensus.io/trace) span's from the passed context
30+
- [Zero dependencies](https://godoc.org/cdr.dev/slog?imports)
3131
- Log to multiple sinks
3232

3333
## Example

internal/entryhuman/entry.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func c(w io.Writer, attrs ...color.Attribute) *color.Color {
4949
// We also do not indent the fields as go's test does that automatically
5050
// for extra lines in a log so if we did it here, the fields would be indented
5151
// twice in test logs. So the Stderr logger indents all the fields itself.
52-
func Fmt(w io.Writer, ent slog.SinkEntry) string {
52+
func Fmt(w io.Writer, ent slog.SinkEntry, sc trace.SpanContext) string {
5353
var ents string
5454
ts := ent.Time.Format(TimeFormat)
5555
ents += ts + " "
@@ -79,10 +79,10 @@ func Fmt(w io.Writer, ent slog.SinkEntry) string {
7979
msg = quote(msg)
8080
ents += msg
8181

82-
if ent.SpanContext != (trace.SpanContext{}) {
82+
if sc != (trace.SpanContext{}) {
8383
ent.Fields = append(slog.M(
84-
slog.F("trace", ent.SpanContext.TraceID),
85-
slog.F("span", ent.SpanContext.SpanID),
84+
slog.F("trace", sc.TraceID),
85+
slog.F("span", sc.SpanID),
8686
), ent.Fields...)
8787
}
8888

internal/entryhuman/entry_test.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import (
1414

1515
var kt = time.Date(2000, time.February, 5, 4, 4, 4, 4, time.UTC)
1616

17-
func TestEntry(t *testing.T) {
17+
func TestFmt(t *testing.T) {
1818
t.Parallel()
1919

20-
test := func(t *testing.T, in slog.SinkEntry, exp string) {
21-
act := entryhuman.Fmt(ioutil.Discard, in)
20+
test := func(t *testing.T, in slog.SinkEntry, sc trace.SpanContext, exp string) {
21+
act := entryhuman.Fmt(ioutil.Discard, in, sc)
2222
assert.Equal(t, exp, act, "entry")
2323
}
2424

@@ -33,7 +33,7 @@ func TestEntry(t *testing.T) {
3333
File: "myfile",
3434
Line: 100,
3535
Func: "ignored",
36-
}, `2000-02-05 04:04:04.000 [DEBUG] <myfile:100> "wowowow\tizi"`)
36+
}, trace.SpanContext{}, `2000-02-05 04:04:04.000 [DEBUG] <myfile:100> "wowowow\tizi"`)
3737
})
3838

3939
t.Run("multilineMessage", func(t *testing.T) {
@@ -42,7 +42,7 @@ func TestEntry(t *testing.T) {
4242
test(t, slog.SinkEntry{
4343
Message: "line1\nline2",
4444
Level: slog.LevelInfo,
45-
}, `0001-01-01 00:00:00.000 [INFO] <.:0> ...
45+
}, trace.SpanContext{}, `0001-01-01 00:00:00.000 [INFO] <.:0> ...
4646
"msg": line1
4747
line2`)
4848
})
@@ -53,18 +53,17 @@ line2`)
5353
test(t, slog.SinkEntry{
5454
Level: slog.LevelWarn,
5555
LoggerNames: []string{"named", "meow"},
56-
}, `0001-01-01 00:00:00.000 [WARN] (named.meow) <.:0> ""`)
56+
}, trace.SpanContext{}, `0001-01-01 00:00:00.000 [WARN] (named.meow) <.:0> ""`)
5757
})
5858

5959
t.Run("trace", func(t *testing.T) {
6060
t.Parallel()
6161

6262
test(t, slog.SinkEntry{
6363
Level: slog.LevelError,
64-
SpanContext: trace.SpanContext{
65-
SpanID: trace.SpanID{0, 1, 2, 3, 4, 5, 6, 7},
66-
TraceID: trace.TraceID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
67-
},
64+
}, trace.SpanContext{
65+
SpanID: trace.SpanID{0, 1, 2, 3, 4, 5, 6, 7},
66+
TraceID: trace.TraceID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
6867
}, `0001-01-01 00:00:00.000 [ERROR] <.:0> "" {"trace": "000102030405060708090a0b0c0d0e0f", "span": "0001020304050607"}`)
6968
})
7069

@@ -76,7 +75,7 @@ line2`)
7675
Fields: slog.M(
7776
slog.F("hey", "hi"),
7877
),
79-
})
78+
}, trace.SpanContext{})
8079
assert.Equal(t, "0001-01-01 00:00:00.000 \x1b[91m[CRITICAL]\x1b[0m\t\x1b[36m<.:0>\x1b[0m\t\"\"\t{\x1b[34m\"hey\"\x1b[0m: \x1b[32m\"hi\"\x1b[0m}", act, "entry")
8180
})
8281
}

slog.go

+4-9
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import (
1717
"runtime"
1818
"sync"
1919
"time"
20-
21-
"go.opencensus.io/trace"
2220
)
2321

2422
// Sink is the destination of a Logger.
@@ -147,11 +145,10 @@ func (l Logger) log(ctx context.Context, level Level, msg string, fields Map) {
147145

148146
func (l Logger) entry(ctx context.Context, level Level, msg string, fields Map) SinkEntry {
149147
ent := SinkEntry{
150-
Time: time.Now().UTC(),
151-
Level: level,
152-
Message: msg,
153-
Fields: fieldsFromContext(ctx).append(fields),
154-
SpanContext: trace.FromContext(ctx).SpanContext(),
148+
Time: time.Now().UTC(),
149+
Level: level,
150+
Message: msg,
151+
Fields: fieldsFromContext(ctx).append(fields),
155152
}
156153
ent = ent.fillLoc(l.skip + 3)
157154
return ent
@@ -275,8 +272,6 @@ type SinkEntry struct {
275272
File string
276273
Line int
277274

278-
SpanContext trace.SpanContext
279-
280275
Fields Map
281276
}
282277

slog_test.go

+3-8
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import (
66
"runtime"
77
"testing"
88

9-
"go.opencensus.io/trace"
10-
119
"cdr.dev/slog"
1210
"cdr.dev/slog/internal/assert"
1311
)
@@ -74,7 +72,7 @@ func TestLogger(t *testing.T) {
7472

7573
File: slogTestFile,
7674
Func: "cdr.dev/slog_test.TestLogger.func2",
77-
Line: 66,
75+
Line: 64,
7876

7977
Fields: slog.M(
8078
slog.F("ctx", 1024),
@@ -90,8 +88,7 @@ func TestLogger(t *testing.T) {
9088
l = l.Named("hello")
9189
l = l.Named("hello2")
9290

93-
ctx, span := trace.StartSpan(bg, "trace")
94-
ctx = slog.With(ctx, slog.F("ctx", io.EOF))
91+
ctx := slog.With(bg, slog.F("ctx", io.EOF))
9592
l = l.With(slog.F("with", 2))
9693

9794
l.Info(ctx, "meow", slog.F("hi", "xd"))
@@ -107,9 +104,7 @@ func TestLogger(t *testing.T) {
107104

108105
File: slogTestFile,
109106
Func: "cdr.dev/slog_test.TestLogger.func3",
110-
Line: 97,
111-
112-
SpanContext: span.SpanContext(),
107+
Line: 94,
113108

114109
Fields: slog.M(
115110
slog.F("with", 2),

sloggers/sloghuman/sloghuman.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"io"
88
"strings"
99

10+
"go.opencensus.io/trace"
11+
1012
"cdr.dev/slog"
1113
"cdr.dev/slog/internal/entryhuman"
1214
"cdr.dev/slog/internal/syncwriter"
@@ -30,7 +32,7 @@ type humanSink struct {
3032
}
3133

3234
func (s humanSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
33-
str := entryhuman.Fmt(s.w2, ent)
35+
str := entryhuman.Fmt(s.w2, ent, trace.FromContext(ctx).SpanContext())
3436
lines := strings.Split(str, "\n")
3537

3638
// We need to add 4 spaces before every field line for readability.

sloggers/slogjson/slogjson.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ func (s jsonSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
5757
m = append(m, slog.F("logger_names", ent.LoggerNames))
5858
}
5959

60-
if ent.SpanContext != (trace.SpanContext{}) {
60+
sc := trace.FromContext(ctx).SpanContext()
61+
if sc != (trace.SpanContext{}) {
6162
m = append(m,
62-
slog.F("trace", ent.SpanContext.TraceID),
63-
slog.F("span", ent.SpanContext.SpanID),
63+
slog.F("trace", sc.TraceID),
64+
slog.F("span", sc.SpanID),
6465
)
6566
}
6667

sloggers/slogstackdriver/slogstackdriver.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ func (s stackdriverSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
5454
}))
5555
}
5656

57-
if ent.SpanContext != (trace.SpanContext{}) {
57+
sc := trace.FromContext(ctx).SpanContext()
58+
if sc != (trace.SpanContext{}) {
5859
e = append(e,
59-
slog.F("logging.googleapis.com/trace", s.traceField(ent.SpanContext.TraceID)),
60-
slog.F("logging.googleapis.com/spanId", ent.SpanContext.SpanID.String()),
61-
slog.F("logging.googleapis.com/trace_sampled", ent.SpanContext.IsSampled()),
60+
slog.F("logging.googleapis.com/trace", s.traceField(sc.TraceID)),
61+
slog.F("logging.googleapis.com/spanId", sc.SpanID.String()),
62+
slog.F("logging.googleapis.com/trace_sampled", sc.IsSampled()),
6263
)
6364
}
6465

sloggers/slogtest/t.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
"os"
1212
"testing"
1313

14+
"go.opencensus.io/trace"
15+
1416
"cdr.dev/slog"
1517
"cdr.dev/slog/internal/entryhuman"
1618
"cdr.dev/slog/sloggers/sloghuman"
@@ -49,7 +51,7 @@ type testSink struct {
4951

5052
func (ts testSink) LogEntry(ctx context.Context, ent slog.SinkEntry) {
5153
// The testing package logs to stdout and not stderr.
52-
s := entryhuman.Fmt(os.Stdout, ent)
54+
s := entryhuman.Fmt(os.Stdout, ent, trace.FromContext(ctx).SpanContext())
5355

5456
switch ent.Level {
5557
case slog.LevelDebug, slog.LevelInfo, slog.LevelWarn:

0 commit comments

Comments
 (0)