-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoption.go
103 lines (87 loc) · 2.74 KB
/
option.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
// Copyright 2024 The original author or authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package gslog
import (
"log/slog"
"os"
"strconv"
"m4o.io/gslog/internal/options"
)
// Options holds information needed to construct an instance of GcpHandler.
type Options struct {
options.Options
}
// WithLogLeveler returns an option that specifies the slog.Leveler for logging.
// Explicitly setting the log level here takes precedence over the other
// options.
func WithLogLeveler(logLevel slog.Leveler) options.OptionProcessor {
return func(o *options.Options) {
o.ExplicitLogLevel = logLevel
}
}
// WithLogLevelFromEnvVar returns an option that specifies the log level
// for logging comes from tne environmental variable specified by the key.
func WithLogLevelFromEnvVar(key string) options.OptionProcessor {
if key == "" {
panic("Env var key is empty")
}
var envVarLogLevel slog.Level
setLogLevel := func(o *options.Options) {
o.EnvVarLogLevel = envVarLogLevel
}
str, ok := os.LookupEnv(key)
if !ok {
return func(_ *options.Options) {}
}
lvl, err := strconv.Atoi(str)
if err == nil {
envVarLogLevel = slog.Level(lvl)
return setLogLevel
}
switch str {
case "DEBUG":
envVarLogLevel = slog.LevelDebug
case "INFO":
envVarLogLevel = slog.LevelInfo
case "WARN":
envVarLogLevel = slog.LevelWarn
case "ERROR":
envVarLogLevel = slog.LevelError
default:
envVarLogLevel = slog.LevelInfo
}
return setLogLevel
}
// WithDefaultLogLeveler returns an option that specifies the default
// slog.Leveler for logging.
func WithDefaultLogLeveler(defaultLogLevel slog.Leveler) options.OptionProcessor {
return func(o *options.Options) {
o.DefaultLogLevel = defaultLogLevel
}
}
// WithSourceAdded returns an option that causes the handler to compute the
// source code position of the log statement and add a slog.SourceKey attribute
// to the output.
func WithSourceAdded() options.OptionProcessor {
return func(o *options.Options) {
o.AddSource = true
}
}
// WithReplaceAttr returns an option that specifies an attribute mapper used to
// rewrite each non-group attribute before it is logged.
func WithReplaceAttr(replaceAttr AttrMapper) options.OptionProcessor {
return func(o *options.Options) {
o.ReplaceAttr = replaceAttr
}
}