telegraf/logger/event_logger.go

69 lines
1.2 KiB
Go
Raw Normal View History

//go:build windows
package logger
import (
2024-06-25 21:48:56 +08:00
"fmt"
"log"
"os"
"time"
2024-06-25 21:48:56 +08:00
"github.com/influxdata/telegraf"
"golang.org/x/sys/windows/svc/eventlog"
)
const (
eidInfo = 1
eidWarning = 2
eidError = 3
)
2024-06-25 21:48:56 +08:00
type eventLogger struct {
eventlog *eventlog.Log
errlog *log.Logger
}
func (l *eventLogger) Close() error {
return l.eventlog.Close()
2024-06-25 21:48:56 +08:00
}
func (l *eventLogger) Print(level telegraf.LogLevel, _ time.Time, prefix string, args ...interface{}) {
// Skip debug and beyond as they cannot be logged
if level >= telegraf.Debug {
2024-06-25 21:48:56 +08:00
return
}
msg := level.Indicator() + " " + 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)
2024-06-25 21:48:56 +08:00
}
if err != nil {
l.errlog.Printf("E! Writing log message failed: %v", err)
}
}
func createEventLogger(cfg *Config) (sink, error) {
2024-06-25 21:48:56 +08:00
eventLog, err := eventlog.Open(cfg.InstanceName)
if err != nil {
return nil, err
}
l := &eventLogger{
eventlog: eventLog,
errlog: log.New(os.Stderr, "", 0),
2024-06-25 21:48:56 +08:00
}
return l, nil
}
func init() {
add("eventlog", createEventLogger)
}