generated from Serpentiel/template
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fxevent.go
86 lines (81 loc) · 2.7 KB
/
fxevent.go
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
// Package logger is the package that provides logging functionality.
package logger
import (
"strings"
"go.uber.org/fx/fxevent"
"go.uber.org/zap"
)
// FxeventLogger is a wrapper around the Logger interface that implements the fxevent.Logger interface.
type FxeventLogger struct {
Logger Logger
}
// LogEvent is called by the fx library to log events.
// nolint:funlen
func (l *FxeventLogger) LogEvent(event fxevent.Event) {
switch e := event.(type) {
case *fxevent.OnStartExecuting:
l.Logger.Info("OnStart hook executing", "callee", e.FunctionName, "caller", e.CallerName)
case *fxevent.OnStartExecuted:
if e.Err != nil {
l.Logger.Info("OnStart hook failed", "callee", e.FunctionName, "caller", e.CallerName, "error", e.Err)
} else {
l.Logger.Info("OnStart hook executed",
"callee", e.FunctionName,
"caller", e.CallerName,
"runtime", e.Runtime.String(),
)
}
case *fxevent.OnStopExecuting:
l.Logger.Info("OnStop hook executing", "callee", e.FunctionName, "caller", e.CallerName)
case *fxevent.OnStopExecuted:
if e.Err != nil {
l.Logger.Info("OnStop hook failed", "callee", e.FunctionName, "caller", e.CallerName, "error", e.Err)
} else {
l.Logger.Info("OnStop hook executed",
zap.String("callee", e.FunctionName),
zap.String("caller", e.CallerName),
zap.String("runtime", e.Runtime.String()),
)
}
case *fxevent.Supplied:
l.Logger.Info("supplied", "type", e.TypeName, "error", e.Err)
case *fxevent.Provided:
for _, rtype := range e.OutputTypeNames {
l.Logger.Info("provided", "constructor", e.ConstructorName, "type", rtype)
}
if e.Err != nil {
l.Logger.Error("error encountered while applying options", "error", e.Err)
}
case *fxevent.Invoking:
// Do not log stack as it will make logs hard to read.
l.Logger.Info("invoking", "function", e.FunctionName)
case *fxevent.Invoked:
if e.Err != nil {
l.Logger.Error("invoke failed", "error", e.Err, "stack", e.Trace, "function", e.FunctionName)
}
case *fxevent.Stopping:
l.Logger.Info("received signal", "signal", strings.ToUpper(e.Signal.String()))
case *fxevent.Stopped:
if e.Err != nil {
l.Logger.Error("stop failed", "error", e.Err)
}
case *fxevent.RollingBack:
l.Logger.Error("start failed, rolling back", "error", e.StartErr)
case *fxevent.RolledBack:
if e.Err != nil {
l.Logger.Error("rollback failed", "error", e.Err)
}
case *fxevent.Started:
if e.Err != nil {
l.Logger.Error("start failed", "error", e.Err)
} else {
l.Logger.Info("started")
}
case *fxevent.LoggerInitialized:
if e.Err != nil {
l.Logger.Error("custom Logger initialization failed", "error", e.Err)
} else {
l.Logger.Info("initialized custom fxevent.Logger", "function", e.ConstructorName)
}
}
}