-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathslog_example_test.go
More file actions
93 lines (78 loc) · 2.32 KB
/
slog_example_test.go
File metadata and controls
93 lines (78 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package sqlslog_test
import (
"context"
"log/slog"
"os"
sqlslog "github.com/akm/sql-slog"
// _ "github.com/mattn/go-sqlite3"
)
func removeTimeAndDuration(groups []string, a slog.Attr) slog.Attr {
if len(groups) == 0 {
switch a.Key {
case slog.TimeKey:
return slog.Attr{}
case "duration":
return slog.Attr{}
}
}
return a
}
func ExampleNewJSONHandler() {
dsn := "dummy-dsn"
ctx := context.TODO()
db, logger, _ := sqlslog.Open(ctx, "mock", dsn,
sqlslog.HandlerFunc(sqlslog.NewJSONHandler),
sqlslog.LogReplaceAttr(removeTimeAndDuration),
)
defer db.Close()
logger.InfoContext(ctx, "Hello, World!")
// Output:
// {"level":"INFO","msg":"Open","driver":"mock","dsn":"dummy-dsn"}
// {"level":"INFO","msg":"Hello, World!"}
}
func ExampleNewTextHandler() {
dsn := "dummy-dsn"
ctx := context.TODO()
db, logger, _ := sqlslog.Open(ctx, "mock", dsn,
sqlslog.HandlerFunc(sqlslog.NewTextHandler),
sqlslog.LogReplaceAttr(removeTimeAndDuration),
)
defer db.Close()
logger.InfoContext(ctx, "Hello, World!")
// Output:
// level=INFO msg=Open driver=mock dsn=dummy-dsn
// level=INFO msg="Hello, World!"
}
func ExampleHandler() {
// Normal slog.Handler with sqlslog.ReplaceLevelAttr knows how to show LevelTrace and LevelVerbose.
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
ReplaceAttr: sqlslog.MergeReplaceAttrs(
sqlslog.ReplaceLevelAttr,
removeTimeAndDuration, // for testing
),
Level: sqlslog.LevelVerbose,
})
dsn := "dummy-dsn"
ctx := context.TODO()
logger := sqlslog.New("mock", dsn, sqlslog.Handler(handler)).Logger()
logger.Log(ctx, slog.Level(sqlslog.LevelTrace), "Foo")
logger.Log(ctx, slog.Level(sqlslog.LevelVerbose), "Bar")
// Output:
// level=TRACE msg=Foo
// level=VERBOSE msg=Bar
}
func ExampleHandler_withoutReplaceLevelAttr() {
// Normal slog.Handler without sqlslog.ReplaceLevelAttr does not know how to show LevelTrace and LevelVerbose.
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
ReplaceAttr: removeTimeAndDuration,
Level: sqlslog.LevelVerbose,
})
dsn := "dummy-dsn"
ctx := context.TODO()
logger := sqlslog.New("mock", dsn, sqlslog.Handler(handler)).Logger()
logger.Log(ctx, slog.Level(sqlslog.LevelTrace), "Foo")
logger.Log(ctx, slog.Level(sqlslog.LevelVerbose), "Bar")
// Output:
// level=DEBUG-4 msg=Foo
// level=DEBUG-8 msg=Bar
}