1
0
Fork 0
telegraf/logger/event_logger.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

78 lines
1.3 KiB
Go

//go:build windows
package logger
import (
"fmt"
"log"
"os"
"time"
"golang.org/x/sys/windows/svc/eventlog"
"github.com/influxdata/telegraf"
)
const (
eidInfo = 1
eidWarning = 2
eidError = 3
)
type eventLogger struct {
eventlog *eventlog.Log
errlog *log.Logger
}
func (l *eventLogger) Close() error {
if l.eventlog == nil {
return nil
}
if err := l.eventlog.Close(); err != nil {
return err
}
l.eventlog = nil
return nil
}
func (l *eventLogger) Print(level telegraf.LogLevel, _ time.Time, prefix string, _ map[string]interface{}, args ...interface{}) {
// Skip debug and beyond as they cannot be logged
if level >= telegraf.Debug {
return
}
msg := prefix + fmt.Sprint(args...)
var err error
switch level {
case telegraf.Error:
err = l.eventlog.Error(eidError, msg)
case telegraf.Warn:
err = l.eventlog.Warning(eidWarning, msg)
case telegraf.Info:
err = l.eventlog.Info(eidInfo, msg)
}
if err != nil {
l.errlog.Printf("E! Writing log message failed: %v", err)
}
// TODO attributes...
}
func createEventLogger(cfg *Config) (sink, error) {
eventLog, err := eventlog.Open(cfg.InstanceName)
if err != nil {
return nil, err
}
l := &eventLogger{
eventlog: eventLog,
errlog: log.New(os.Stderr, "", 0),
}
return l, nil
}
func init() {
add("eventlog", createEventLogger)
}