Skip to content

Commit 6f5af56

Browse files
authored
Fx Custom Logger (#5)
* implement fx custom logger * update teapot
1 parent 070abb3 commit 6f5af56

3 files changed

Lines changed: 173 additions & 0 deletions

File tree

adapter/fx/fx.go

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package fx
2+
3+
import (
4+
tea "github.com/structx/teapot"
5+
"go.uber.org/fx/fxevent"
6+
)
7+
8+
type eventLogger struct {
9+
l *tea.Logger
10+
}
11+
12+
// interface compliance
13+
var _ fxevent.Logger = (*eventLogger)(nil)
14+
15+
// New constructor fx event logger using tea logger
16+
func New(logger *tea.Logger) fxevent.Logger {
17+
return &eventLogger{
18+
l: logger,
19+
}
20+
}
21+
22+
// LogEvent implements [fxevent.Logger].
23+
func (el *eventLogger) LogEvent(evt fxevent.Event) {
24+
switch e := evt.(type) {
25+
case *fxevent.BeforeRun:
26+
el.l.Debug(
27+
"[Fx] before run",
28+
tea.String("kind", e.Kind),
29+
tea.String("module_name", e.ModuleName),
30+
tea.String("name", e.Name),
31+
)
32+
case *fxevent.Decorated:
33+
if e.Err != nil {
34+
el.l.Error("[Fx] decorate", tea.Error(e.Err))
35+
return
36+
}
37+
case *fxevent.Invoked:
38+
if e.Err != nil {
39+
el.l.Error("[Fx] invoked", tea.Error(e.Err))
40+
return
41+
}
42+
case *fxevent.Invoking:
43+
el.l.Debug("[Fx] invoking",
44+
tea.String("function_name", e.FunctionName),
45+
tea.String("module_name", e.ModuleName),
46+
)
47+
case *fxevent.LoggerInitialized:
48+
if e.Err != nil {
49+
el.l.Error("[Fx] logger initialized", tea.Error(e.Err))
50+
return
51+
}
52+
el.l.Debug("[Fx] logger initialized", tea.String("constructor_name", e.ConstructorName))
53+
case *fxevent.OnStartExecuted:
54+
if e.Err != nil {
55+
el.l.Error("[Fx] on start executed", tea.Error(e.Err))
56+
return
57+
}
58+
el.l.Debug("[Fx] on start executed",
59+
tea.String("caller_name", e.CallerName),
60+
tea.String("function_name", e.FunctionName),
61+
tea.String("method", e.Method),
62+
tea.Int64("runtime", int64(e.Runtime)),
63+
)
64+
case *fxevent.OnStartExecuting:
65+
el.l.Debug("[Fx] on start executing",
66+
tea.String("caller_name", e.CallerName),
67+
tea.String("function_name", e.FunctionName),
68+
)
69+
case *fxevent.OnStopExecuted:
70+
if e.Err != nil {
71+
el.l.Error("[Fx] on stop executed", tea.Error(e.Err))
72+
return
73+
}
74+
el.l.Debug("[Fx] on stop executed",
75+
tea.String("caller_name", e.CallerName),
76+
tea.String("function_name", e.FunctionName),
77+
)
78+
case *fxevent.OnStopExecuting:
79+
el.l.Debug("[Fx] on stop executing",
80+
tea.String("caller_name", e.CallerName),
81+
tea.String("function_name", e.FunctionName),
82+
)
83+
case *fxevent.Provided:
84+
if e.Err != nil {
85+
el.l.Error("[Fx] provided", tea.Error(e.Err))
86+
return
87+
}
88+
el.l.Debug("[Fx] provided",
89+
tea.String("constructor_name", e.ConstructorName),
90+
tea.String("module_name", e.ModuleName),
91+
tea.Bool("private", e.Private),
92+
)
93+
case *fxevent.Replaced:
94+
if e.Err != nil {
95+
el.l.Error("[Fx] replaced", tea.Error(e.Err))
96+
return
97+
}
98+
el.l.Debug("[Fx] replaced",
99+
tea.String("module_name", e.ModuleName),
100+
tea.StringSlice("module_trace", e.ModuleTrace),
101+
tea.StringSlice("output_type_names", e.OutputTypeNames),
102+
tea.StringSlice("stacktrace", e.StackTrace),
103+
)
104+
case *fxevent.RolledBack:
105+
if e.Err != nil {
106+
el.l.Error("[Fx] rolled back", tea.Error(e.Err))
107+
}
108+
case *fxevent.RollingBack:
109+
if e.StartErr != nil {
110+
el.l.Error("[Fx] rolling back", tea.Error(e.StartErr))
111+
}
112+
case *fxevent.Run:
113+
if e.Err != nil {
114+
el.l.Error("[Fx] run", tea.Error(e.Err))
115+
return
116+
}
117+
el.l.Debug("[Fx] run",
118+
tea.String("kind", e.Kind),
119+
tea.String("module_name", e.ModuleName),
120+
tea.String("name", e.Name),
121+
)
122+
case *fxevent.Started:
123+
if e.Err != nil {
124+
el.l.Error("[Fx] started", tea.Error(e.Err))
125+
}
126+
case *fxevent.Stopped:
127+
if e.Err != nil {
128+
el.l.Error("[Fx] stopped", tea.Error(e.Err))
129+
}
130+
case *fxevent.Stopping:
131+
el.l.Debug("[Fx] stopping", tea.String("signal", e.Signal.String()))
132+
case *fxevent.Supplied:
133+
if e.Err != nil {
134+
el.l.Debug("[Fx] supplied",
135+
tea.String("module_name", e.ModuleName),
136+
tea.String("type_name", e.TypeName),
137+
tea.StringSlice("module_trace", e.ModuleTrace),
138+
tea.StringSlice("stacktrace", e.StackTrace),
139+
)
140+
}
141+
}
142+
}

adapter/fx/go.mod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module github.com/structx/teapot/adapter/fx
2+
3+
go 1.25.5
4+
5+
require (
6+
github.com/structx/teapot v0.0.2
7+
go.uber.org/fx v1.24.0
8+
)
9+
10+
require (
11+
go.uber.org/multierr v1.10.0 // indirect
12+
go.uber.org/zap v1.26.0 // indirect
13+
)

adapter/fx/go.sum

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
6+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
7+
github.com/structx/teapot v0.0.2 h1:Hq2oxcuYuhUgsNP47PkETOxwO7EpkfB/0srt2ZtVVdc=
8+
github.com/structx/teapot v0.0.2/go.mod h1:2Okp2a8rEEbRWxrEf9zwGPeafR6s9iUGOH6699wLVnY=
9+
go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg=
10+
go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo=
11+
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
12+
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
13+
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
14+
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
15+
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
16+
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
17+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
18+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)