package config import ( "errors" "log/slog" "reflect" ) const JSCKLogging string = "logging" type JobSearchConfigLogging struct { Level string `cfg:"level" default:"warn"` File string `cfg:"file"` } /* * General section functions * See related methods in section.go */ func (c *JobSearchConfigLogging) Keys() []string { return keysOf(c) } func (c JobSearchConfigLogging) Map() map[string]any { return mapOf(c) } func (c JobSearchConfigLogging) Flatten() map[string]any { return flattenOf(JSCKLogging, c) } func (c JobSearchConfigLogging) TypeOf(key string) (reflect.Kind, error) { return typeOf(c, key) } func (c JobSearchConfigLogging) ValueOf(key string) (any, error) { return valueOf(c, key) } func (c *JobSearchConfigLogging) SetValue(key string, value any) error { return setValue(c, key, value) } /* Section specific functions */ // Checks values before they are stored (see validator) func (c *JobSearchConfigLogging) validate(key string, value any) error { switch key { case "level": switch value.(string) { case "debug", "info", "warn", "error": default: return errors.New( "invalid log level. Must be one of: debug, info, warn, error") } } return nil } // Utility methods for converting level strings to slog levels func ConfigLevelToLogLevel(level string) slog.Level { switch level { case "debug": return slog.LevelDebug case "info": return slog.LevelInfo case "warn": return slog.LevelWarn case "error": return slog.LevelError default: return 99 } } // LogLevel returns the configured level as an slog level. An unknown level // gives 99, above every real level, so nothing is logged. func (c *JobSearchConfigLogging) LogLevel() slog.Level { return ConfigLevelToLogLevel(c.Level) }