Add custom logger with different handlers based on environment variables.

This commit is contained in:
Jeffrey Paul 2024-05-14 04:48:28 -07:00
parent f964a0d2e4
commit 373dd0ac76

58
simplelog.go Normal file
View File

@ -0,0 +1,58 @@
package simplelog
import (
"log"
"log/slog"
"os"
"github.com/mattn/go-isatty"
)
var (
relpServerURL = os.Getenv("LOGGER_RELP_URL")
webhookURL = os.Getenv("LOGGER_WEBHOOK_URL")
)
type CustomLogger struct {
handlers []slog.Handler
}
func (cl *CustomLogger) Log(level slog.Level, message string, data ...slog.Field) error {
for _, handler := range cl.handlers {
if err := handler.Log(level, message, data...); err != nil {
return err
}
}
return nil
}
var ourCustomLogger *slog.Logger
func init() {
ourCustomLogger = NewCustomLogger()
slog.SetDefault(ourCustomLogger)
}
func NewCustomLogger() *CustomLogger {
cl := &CustomLogger{}
if isatty.IsTerminal(os.Stdout.Fd()) {
cl.handlers = append(cl.handlers, NewConsoleHandler())
} else {
cl.handlers = append(cl.handlers, NewJSONHandler())
}
if relpServerURL != "" {
handler, err := NewRELPHandler(relpServerURL)
if err != nil {
log.Fatalf("Failed to initialize RELP handler: %v", err)
}
cl.handlers = append(cl.handlers, handler)
}
if webhookURL != "" {
handler, err := NewWebhookHandler(webhookURL)
if err != nil {
log.Fatalf("Failed to initialize Webhook handler: %v", err)
}
cl.handlers = append(cl.handlers, handler)
}
return cl
}