57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
// time configuration
|
|
TimeFormat string `default:"2006-01-02 15:04:05" env:"time_format"`
|
|
TimeZoneLocal string `default:"America/Chicago" env:"time_zone"`
|
|
TZLocal *time.Location `ignored:"true"`
|
|
TZUTC *time.Location `ignored:"true"`
|
|
|
|
// logging
|
|
LogLevel int `default:"50" env:"log_level"`
|
|
Log *Log `ignored:"true"`
|
|
|
|
// webserver
|
|
WebServerPort int `default:"8080" env:"webserver_port"`
|
|
WebServerIP string `default:"0.0.0.0" env:"webserver_ip"`
|
|
WebServerReadTimeout int `default:"5" env:"webserver_read_timeout"`
|
|
WebServerWriteTimeout int `default:"1" env:"webserver_write_timeout"`
|
|
WebServerIdleTimeout int `default:"2" env:"webserver_idle_timeout"`
|
|
}
|
|
|
|
// New initializes the config variable for use with a prepared set of defaults.
|
|
func New() Config {
|
|
cfg := Config{
|
|
Log: &Log{
|
|
SLogLevel: new(slog.LevelVar),
|
|
},
|
|
}
|
|
|
|
// Initialize Logger
|
|
cfg.Log.Log = slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: cfg.Log.SLogLevel,
|
|
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
|
|
if a.Key == slog.LevelKey {
|
|
level := a.Value.Any().(slog.Level)
|
|
levelLabel, exists := LevelNames[level]
|
|
if !exists {
|
|
levelLabel = level.String()
|
|
}
|
|
|
|
a.Value = slog.StringValue(levelLabel)
|
|
}
|
|
return a
|
|
},
|
|
}))
|
|
cfg.Log.Ctx = context.Background()
|
|
|
|
return cfg
|
|
}
|