44 "errors"
55 "log/slog"
66 "os"
7- "time"
87)
98
109const (
@@ -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
2928func Level () slog.Level {
30- return logLevel . Level ()
29+ return logLevel
3130}
3231
3332func 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