autobrr/internal/logger/ssehook.go
ze0s 604c7896bd
chore: add LICENSE GPLv2-or-later (#897)
* chore: add LICENSE

* chore: add LICENSE to README
2023-05-01 16:21:59 +02:00

46 lines
896 B
Go

// Copyright (c) 2021 - 2023, Ludvig Lundgren and the autobrr contributors.
// SPDX-License-Identifier: GPL-2.0-or-later
package logger
import (
"encoding/json"
"strings"
"time"
"github.com/r3labs/sse/v2"
"github.com/rs/zerolog"
)
type LogMessage struct {
Time string `json:"time"`
Level string `json:"level"`
Message string `json:"message"`
}
func (m LogMessage) ToJsonString() string {
j, err := json.Marshal(m)
if err != nil {
return ""
}
return string(j)
}
type ServerSentEventHook struct {
sse *sse.Server
}
func (h *ServerSentEventHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
if h.sse != nil {
// publish too logs topic
logMsg := LogMessage{
Time: time.Now().Format(time.RFC3339),
Level: strings.ToUpper(level.String()),
Message: msg,
}
h.sse.Publish("logs", &sse.Event{
Data: []byte(logMsg.ToJsonString()),
})
}
}