1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-12-23 22:11:10 +02:00
Files
imgproxy/logger/logger.go
2025-09-21 20:13:27 +06:00

71 lines
1.4 KiB
Go

package logger
import (
"context"
"fmt"
"log/slog"
"os"
"github.com/imgproxy/imgproxy/v3/logger/gliblog"
"github.com/imgproxy/imgproxy/v3/logger/syslog"
)
// We store a [Handler] instance here so that we can restore it in [Unmute]
var handler *Handler
// init initializes the default logger
func init() {
cfg := NewDefaultConfig()
handler = NewHandler(os.Stdout, &cfg)
setDefaultHandler(handler)
}
// Init creates a logger and sets it as the default log/slog logger
func Init(config *Config) error {
if err := config.Validate(); err != nil {
return err
}
handler = NewHandler(os.Stdout, config)
setDefaultHandler(handler)
gliblog.Init()
if config.Syslog.Enabled {
slHook, err := syslog.NewHook(&config.Syslog)
if err != nil {
return fmt.Errorf("Unable to connect to syslog daemon: %s", err)
}
if slHook != nil {
AddHook(slHook)
}
}
return nil
}
func AddHook(hook Hook) {
if handler != nil {
handler.AddHook(hook)
}
}
func Fatal(msg string, args ...any) {
slog.Log(context.Background(), LevelCritical, msg, args...)
os.Exit(1)
}
// Mute sets the default logger to a discard logger muting all log output
func Mute() {
setDefaultHandler(slog.DiscardHandler)
}
// Unmute restores the default logger to the one created in [Init]
func Unmute() {
setDefaultHandler(handler)
}
func setDefaultHandler(h slog.Handler) {
slog.SetDefault(slog.New(h))
}