Skip to content

Commit b435be6

Browse files
authored
Merge pull request #13 from cdr/sinks
Add Sinks
2 parents ca4ed15 + d080e67 commit b435be6

26 files changed

+548
-570
lines changed

ci/lint.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ cd "$(git rev-parse --show-toplevel)"
77
# shellcheck disable=SC2046
88
shellcheck -x $(git ls-files "*.sh")
99
go vet ./...
10-
go run golang.org/x/lint/golint -set_exit_status ./...
10+
#go run golang.org/x/lint/golint -set_exit_status ./...

doc.go

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
// Package slog implements minimal structured logging.
12
package slog // import "go.coder.com/slog"

entry.go

-123
This file was deleted.

examples_test.go

+3-42
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,17 @@
11
package slog_test
22

33
import (
4-
"context"
54
"testing"
65

76
"go.coder.com/slog"
8-
"go.coder.com/slog/stderrlog"
9-
"go.coder.com/slog/testlog"
7+
"go.coder.com/slog/testslog"
108
)
119

12-
func Example_stderr() {
13-
ctx := context.Background()
14-
stderrlog.Info(ctx, "my message here",
15-
slog.F("field_name", "something or the other"),
16-
slog.F("some_map", map[string]interface{}{
17-
"nested_fields": "wowow",
18-
}),
19-
slog.F("some slice", []interface{}{
20-
1,
21-
"foof",
22-
"bar",
23-
true,
24-
}),
25-
slog.Component("test"),
26-
27-
slog.F("name", slog.ValueFunc(func() interface{} {
28-
return "wow"
29-
})),
30-
)
31-
32-
// test_test.go:17: Sep 06 14:33:34.677 [INFO] (test): my_message_here
33-
// field_name: something or the other
34-
// some_map:
35-
// nested_fields: wowow
36-
// error:
37-
// - msg: wrap2
38-
// loc: /Users/nhooyr/src/cdr/slog/test_test.go:22
39-
// fun: go.coder.com/slog_test.TestExampleStderr
40-
// - msg: wrap1
41-
// loc: /Users/nhooyr/src/cdr/slog/test_test.go:23
42-
// fun: go.coder.com/slog_test.TestExampleStderr
43-
// - EOF
44-
// name: wow
45-
}
46-
4710
func Example_test() {
4811
// Nil here but would be provided by the testing framework.
4912
var t *testing.T
5013

51-
testlog.Info(t, "my message here",
14+
testslog.Info(t, "my message here",
5215
slog.F("field_name", "something or the other"),
5316
slog.F("some_map", map[string]interface{}{
5417
"nested_fields": "wowow",
@@ -61,9 +24,7 @@ func Example_test() {
6124
}),
6225
slog.Component("test"),
6326

64-
slog.F("name", slog.ValueFunc(func() interface{} {
65-
return "wow"
66-
})),
27+
slog.F("name", "hi"),
6728
)
6829

6930
// --- PASS: TestExampleTest (0.00s)

fields.go

+46-15
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,25 @@ package slog
22

33
import (
44
"context"
5-
"reflect"
5+
"runtime"
6+
"time"
67

78
"go.opencensus.io/trace"
8-
)
9-
10-
type level string
119

12-
const (
13-
levelDebug level = "DEBUG"
14-
levelInfo level = "INFO"
15-
levelWarn level = "WARN"
16-
levelError level = "ERROR"
17-
levelCritical level = "CRITICAL"
18-
levelFatal level = "FATAL"
10+
"go.coder.com/slog/internal/skipctx"
11+
"go.coder.com/slog/slogcore"
1912
)
2013

2114
type parsedFields struct {
2215
component string
2316
spanCtx trace.SpanContext
2417

25-
fields fieldMap
18+
fields slogcore.Map
2619
}
2720

2821
func parseFields(fields []Field) parsedFields {
2922
var l parsedFields
30-
l.fields = make(fieldMap, 0, len(fields))
23+
l.fields = make(slogcore.Map, 0, len(fields))
3124

3225
for _, f := range fields {
3326
if s, ok := f.(componentField); ok {
@@ -41,7 +34,7 @@ func parseFields(fields []Field) parsedFields {
4134
}
4235

4336
func (l parsedFields) appendField(k string, v interface{}) parsedFields {
44-
l.fields = l.fields.append(k, reflectFieldValue(reflect.ValueOf(v)))
37+
l.fields = l.fields.Append(k, slogcore.Reflect(v))
4538
return l
4639
}
4740

@@ -55,7 +48,7 @@ func (l parsedFields) with(l2 parsedFields) parsedFields {
5548
l.spanCtx = l2.spanCtx
5649
}
5750

58-
l.fields = l.fields.appendFields(l2.fields)
51+
l.fields = l.fields.AppendFields(l2.fields)
5952
return l
6053
}
6154

@@ -76,3 +69,41 @@ func (l parsedFields) withContext(ctx context.Context) parsedFields {
7669

7770
return l.with(l2)
7871
}
72+
73+
type entryParams struct {
74+
level slogcore.Level
75+
msg string
76+
fields []Field
77+
skip int
78+
}
79+
80+
func (l parsedFields) entry(ctx context.Context, params entryParams) slogcore.Entry {
81+
l = l.withContext(ctx)
82+
l = l.withFields(params.fields)
83+
84+
ent := slogcore.Entry{
85+
Time: time.Now(),
86+
Level: params.level,
87+
Component: l.component,
88+
Message: params.msg,
89+
SpanContext: trace.FromContext(ctx).SpanContext(),
90+
Fields: l.fields,
91+
}
92+
93+
file, line, fn, ok := location(params.skip + 1 + skipctx.From(ctx))
94+
if ok {
95+
ent.File = file
96+
ent.Line = line
97+
ent.Func = fn
98+
}
99+
return ent
100+
}
101+
102+
func location(skip int) (file string, line int, fn string, ok bool) {
103+
pc, file, line, ok := runtime.Caller(skip + 1)
104+
if !ok {
105+
return "", 0, "", false
106+
}
107+
f := runtime.FuncForPC(pc)
108+
return file, line, f.Name(), true
109+
}

go.mod

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,22 @@ go 1.13
44

55
require (
66
github.com/fatih/camelcase v1.0.0
7+
github.com/fatih/color v1.7.0 // indirect
78
github.com/golang/protobuf v1.3.2
89
github.com/google/go-cmp v0.3.0
10+
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
911
github.com/kr/pretty v0.1.0 // indirect
12+
github.com/mattn/go-colorable v0.1.2 // indirect
13+
github.com/mattn/go-isatty v0.0.9 // indirect
14+
github.com/pkg/errors v0.8.1 // indirect
15+
github.com/sirupsen/logrus v1.4.2 // indirect
16+
github.com/spf13/pflag v1.0.3 // indirect
1017
go.coder.com/go-tools v0.0.0-20190317003359-0c6a35b74a16
1118
go.opencensus.io v0.22.1
1219
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3
20+
golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
21+
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd // indirect
1322
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
14-
gotest.tools/gotestsum v0.3.5
23+
gotest.tools/gotestsum v0.3.6-0.20190825182939-fc6cb5870c52
1524
mvdan.cc/sh v2.6.4+incompatible
1625
)

0 commit comments

Comments
 (0)