-
Notifications
You must be signed in to change notification settings - Fork 7
/
methods.go
146 lines (124 loc) · 3.92 KB
/
methods.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package logger
import (
"context"
"net/url"
"os"
"strings"
"github.com/kubescape/go-logger/helpers"
"github.com/kubescape/go-logger/iconlogger"
"github.com/kubescape/go-logger/nonelogger"
"github.com/kubescape/go-logger/prettylogger"
"github.com/kubescape/go-logger/zaplogger"
"github.com/uptrace/uptrace-go/uptrace"
"go.opentelemetry.io/otel/attribute"
)
const (
// Logger level environment name
EnvLoggerLevel = "KS_LOGGER_LEVEL"
// Logger name environment name
EnvLoggerName = "KS_LOGGER_NAME"
)
var l helpers.ILogger
// Return initialized logger. If logger not initialized, will call InitializeLogger() with the default value
func L() helpers.ILogger {
if l == nil {
InitDefaultLogger()
}
return l
}
/*
InitLogger initialize desired logger
Use:
InitLogger("<logger name>")
Supported logger names (call ListLoggersNames() for listing supported loggers)
- "zap": Logger from package "go.uber.org/zap"
- "pretty", "colorful": Human friendly colorful logger
- "none", "mock", "empty", "ignore": Logger will not print anything
- "icon", "emoji": Human friendly logger with colors and icons/symbols
Default:
- "pretty"
If the logger name is empty, will try to get the logger name from the environment variable KS_LOGGER_NAME.
If the logger level environment variable is set, will set the logger level to the value of the environment variable.
e.g.
InitLogger("none") -> will initialize the mock logger
*/
func InitLogger(loggerName string) {
if loggerName == "" {
// get logger name from environment variable
loggerName = os.Getenv(EnvLoggerName)
}
switch strings.ToLower(loggerName) {
case zaplogger.LoggerName:
l = zaplogger.NewZapLogger()
case prettylogger.LoggerName, "colorful":
l = prettylogger.NewPrettyLogger()
case iconlogger.LoggerName, "emoji":
l = iconlogger.NewIconLogger()
case nonelogger.LoggerName, "mock", "empty", "ignore":
l = nonelogger.NewNoneLogger()
default:
l = prettylogger.NewPrettyLogger()
}
// set logger level from environment variable, if empty, will use the default value as set by the package
if lev := os.Getenv(EnvLoggerLevel); lev != "" {
if err := l.SetLevel(lev); err != nil {
l.Warning("failed to set logger level", helpers.String("environment", EnvLoggerLevel), helpers.Error(err))
}
}
}
func InitDefaultLogger() {
InitLogger("")
}
func DisableColor(flag bool) {
prettylogger.DisableColor(flag)
}
func EnableColor(flag bool) {
prettylogger.EnableColor(flag)
}
func ListLoggersNames() []string {
return []string{prettylogger.LoggerName, iconlogger.LoggerName, zaplogger.LoggerName, nonelogger.LoggerName}
}
// InitOtel configures OpenTelemetry to export data to OTEL_COLLECTOR_SVC using uptrace collector.
// You have to set the env variable OTEL_COLLECTOR_SVC to enable otel.
// It is required to call ShutdownOtel on the context at the end of the main.
//
// func main() {
// // configure otel
// ctx := logger.InitOtel(logger.L(), "<service>", "<version>")
// defer logger.ShutdownOtel(ctx)
//
// // create a span
// ctx, span := otel.Tracer("").Start(ctx, "<name of the span>")
// defer span.End()
//
// if err := cmd.Execute(ctx); err != nil {
// // attach log to the span
// logger.L().Ctx(ctx).Fatal(err.Error())
// }
// }
func InitOtel(serviceName, version, accountId, clusterName string, collectorUrl url.URL) context.Context {
ctx := context.Background()
if collectorUrl.Scheme == "" {
collectorUrl.Scheme = "http"
}
if collectorUrl.User == nil {
collectorUrl.User = url.User("t")
}
if collectorUrl.Path == "" {
collectorUrl.Path = "1"
}
attrs := []attribute.KeyValue{
attribute.String("account.id", accountId),
attribute.String("cluster.name", clusterName),
}
uptrace.ConfigureOpentelemetry(
uptrace.WithDSN(collectorUrl.String()),
uptrace.WithServiceName(serviceName),
uptrace.WithServiceVersion(version),
uptrace.WithResourceAttributes(attrs...),
)
return ctx
}
func ShutdownOtel(ctx context.Context) {
uptrace.Shutdown(ctx)
}