Skip to content

Commit d9d5e02

Browse files
committed
Add slog/17.go125-record-source
1 parent b6178b7 commit d9d5e02

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- go run .
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log/slog"
7+
"os"
8+
"path/filepath"
9+
"time"
10+
)
11+
12+
type (
13+
myHandler struct {
14+
handler slog.Handler
15+
}
16+
)
17+
18+
func (me *myHandler) Handle(ctx context.Context, r slog.Record) error {
19+
var (
20+
// Go 1.25 から追加された
21+
// REF: https://pkg.go.dev/log/slog@go1.25.1#Record.Source
22+
source = r.Source()
23+
)
24+
if source == nil {
25+
return nil
26+
}
27+
28+
var (
29+
f = filepath.Base(source.File) // ファイルパス (そのままだとフルパス)
30+
fn = source.Function // 関数
31+
l = source.Line // 行
32+
msg = r.Message
33+
)
34+
fmt.Printf("%s:%s:%d\t%s\n", f, fn, l, msg)
35+
36+
return nil
37+
}
38+
39+
func (me *myHandler) Enabled(ctx context.Context, l slog.Level) bool {
40+
return me.handler.Enabled(ctx, l)
41+
}
42+
43+
func (me *myHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
44+
return &myHandler{handler: me.handler.WithAttrs(attrs)}
45+
}
46+
47+
func (me *myHandler) WithGroup(name string) slog.Handler {
48+
return &myHandler{handler: me.handler.WithGroup(name)}
49+
}
50+
51+
func main() {
52+
if err := run(); err != nil {
53+
slog.Error("failed to run", "error", err)
54+
os.Exit(1)
55+
}
56+
}
57+
58+
func run() error {
59+
var (
60+
v = &slog.LevelVar{}
61+
o = &slog.HandlerOptions{
62+
Level: v,
63+
AddSource: true,
64+
}
65+
w = os.Stderr
66+
h = &myHandler{handler: slog.NewTextHandler(w, o)}
67+
l = slog.New(h)
68+
)
69+
l.Info("Start")
70+
{
71+
time.Sleep(1 * time.Second)
72+
v.Set(slog.LevelWarn)
73+
}
74+
l.Info("End")
75+
76+
return nil
77+
}

0 commit comments

Comments
 (0)