12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package syslog
- import (
- "errors"
- "fmt"
- "log/slog"
- "strings"
- "github.com/imgproxy/imgproxy/v3/ensure"
- "github.com/imgproxy/imgproxy/v3/env"
- )
- var (
- IMGPROXY_SYSLOG_ENABLE = env.Describe("IMGPROXY_SYSLOG_ENABLE", "boolean")
- IMGPROXY_SYSLOG_LEVEL = env.Describe("IMGPROXY_SYSLOG_LEVEL", "debug|info|warn|error|crit")
- IMGPROXY_SYSLOG_NETWORK = env.Describe("IMGPROXY_SYSLOG_NETWORK", "string")
- IMGPROXY_SYSLOG_ADDRESS = env.Describe("IMGPROXY_SYSLOG_ADDRESS", "string")
- IMGPROXY_SYSLOG_TAG = env.Describe("IMGPROXY_SYSLOG_TAG", "string")
- )
- type Config struct {
- Enabled bool
- Level slog.Leveler
- Network string
- Addr string
- Tag string
- }
- func NewDefaultConfig() Config {
- return Config{
- Enabled: false,
- Level: slog.LevelInfo,
- Tag: "imgproxy",
- }
- }
- func LoadConfigFromEnv(c *Config) (*Config, error) {
- c = ensure.Ensure(c, NewDefaultConfig)
- var levelStr string
- err := errors.Join(
- env.Bool(&c.Enabled, IMGPROXY_SYSLOG_ENABLE),
- env.String(&c.Network, IMGPROXY_SYSLOG_NETWORK),
- env.String(&c.Addr, IMGPROXY_SYSLOG_ADDRESS),
- env.String(&c.Tag, IMGPROXY_SYSLOG_TAG),
- env.String(&levelStr, IMGPROXY_SYSLOG_LEVEL),
- )
- if levelStr != "" {
- c.Level = parseLevel(levelStr)
- }
- return c, err
- }
- func (c *Config) Validate() error {
- if !c.Enabled {
- return nil
- }
- if c.Network != "" && c.Addr == "" {
- return errors.New("syslog address is required if syslog network is set")
- }
- return nil
- }
- func parseLevel(str string) slog.Level {
- switch strings.ToLower(str) {
- case "debug":
- return slog.LevelDebug
- case "info":
- return slog.LevelInfo
- case "warn":
- return slog.LevelWarn
- case "error":
- return slog.LevelError
- case "crit":
- return slog.LevelError + 8
- default:
- slog.Warn(fmt.Sprintf("Syslog level '%s' is invalid, 'info' is used", str))
- return slog.LevelInfo
- }
- }
|