Skip to content

Commit beb8c53

Browse files
committed
refactor(logging): Rework config init logic
1 parent 57e9cce commit beb8c53

File tree

1 file changed

+34
-42
lines changed

1 file changed

+34
-42
lines changed

logging/logging.go

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"errors"
55
"log/slog"
66
"os"
7-
"time"
87
)
98

109
const (
@@ -23,68 +22,61 @@ var (
2322
"FATAL": slog.LevelError, // TODO in v6.0.0: Remove FATAL level support
2423
}
2524

26-
logLevel = new(slog.LevelVar)
25+
logLevel slog.Level
2726
)
2827

2928
func Level() slog.Level {
30-
return logLevel.Level()
29+
return logLevel
3130
}
3231

3332
func levelFromString(level string) (slog.Level, error) {
3433
if slogLevel, exists := logLevels[level]; exists {
3534
return slogLevel, nil
3635
}
37-
return slog.LevelDebug, ErrInvalidLevelString
36+
return logLevel, ErrInvalidLevelString
3837
}
3938

40-
func Configure() {
41-
logHandlerOptions := &slog.HandlerOptions{Level: logLevel, AddSource: false}
39+
func getConfiguredLogLevel() slog.Level {
40+
levelAsString := os.Getenv(GatusLogLevelEnvVar)
41+
if len(levelAsString) == 0 {
42+
slog.Info("Defaulting log level", "level", "INFO")
43+
return slog.LevelInfo
44+
} else if level, err := levelFromString(levelAsString); err != nil {
45+
slog.Warn("Invalid log level, using default", "provided", level, "default", "INFO")
46+
return slog.LevelInfo
47+
} else {
48+
if levelAsString == "FATAL" {
49+
slog.Warn("WARNING: FATAL log level has been deprecated and will be removed in v6.0.0")
50+
slog.Warn("WARNING: Please use the ERROR log level instead")
51+
}
52+
return level
53+
}
54+
}
4255

56+
func getConfiguredLogSource() bool {
4357
logSourceAsString := os.Getenv(GatusLogSourceEnvVar)
44-
switch logSourceAsString {
45-
case "", "FALSE":
46-
break
47-
case "TRUE":
48-
logHandlerOptions.AddSource = true
49-
default:
50-
slog.Warn("Invalid log source value, defaulting to false", "provided", logSourceAsString)
58+
if len(logSourceAsString) == 0 {
59+
slog.Info("Defaulting log source to false")
60+
return false
61+
} else if logSourceAsString != "TRUE" && logSourceAsString != "FALSE" {
62+
slog.Warn("Invalid log source", "provided", logSourceAsString, "default", "FALSE")
63+
return false
5164
}
65+
return logSourceAsString == "TRUE"
66+
}
5267

68+
func Configure() {
5369
logTypeAsString := os.Getenv(GatusConfigLogTypeEnvVar)
5470
switch logTypeAsString {
5571
case "", "TEXT":
56-
logHandlerOptions.ReplaceAttr = func(groups []string, a slog.Attr) slog.Attr {
57-
if a.Key == "time" {
58-
a.Value = slog.StringValue(a.Value.Time().Format("2006-01-02|15:04:05"))
59-
}
60-
if a.Value.Kind() == slog.KindDuration {
61-
a.Value = slog.DurationValue(a.Value.Duration().Round(time.Millisecond))
62-
}
63-
return a
64-
}
65-
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, logHandlerOptions)))
66-
slog.Info("Log type set", "type", logTypeAsString)
72+
break
6773
case "JSON":
68-
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, logHandlerOptions)))
69-
slog.Info("Log type set", "type", logTypeAsString)
74+
logSource := getConfiguredLogSource()
75+
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{AddSource: logSource})))
7076
default:
71-
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, logHandlerOptions)))
7277
slog.Warn("Invalid log type", "provided", logTypeAsString, "default", "TEXT")
7378
}
7479

75-
logLevelAsString := os.Getenv(GatusLogLevelEnvVar)
76-
if slogLevel, err := levelFromString(logLevelAsString); err != nil {
77-
logLevel.Set(slog.LevelInfo)
78-
if len(logLevelAsString) == 0 {
79-
slog.Info("Defaulting log level", "level", slog.LevelInfo)
80-
} else {
81-
slog.Warn("Invalid log level", "provided", logLevelAsString, "default", slog.LevelInfo)
82-
}
83-
} else {
84-
if logLevelAsString == "FATAL" {
85-
slog.Warn("FATAL log level deprecated, using ERROR level instead")
86-
}
87-
logLevel.Set(slogLevel)
88-
slog.Info("Log level set", "level", slogLevel)
89-
}
80+
logLevel = getConfiguredLogLevel()
81+
slog.SetLogLoggerLevel(logLevel)
9082
}

0 commit comments

Comments
 (0)