1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-03-03 15:22:30 +02:00
go-micro/plugins/logger/windowseventlog/windowseventlog.go

114 lines
2.0 KiB
Go
Raw Normal View History

// +build windows
package windowseventlog
import (
"context"
"fmt"
"os"
2021-10-12 12:55:53 +01:00
"go-micro.dev/v4/logger"
"golang.org/x/sys/windows/svc/eventlog"
)
type eventLogger struct {
elog *eventlog.Log
opts Options
}
func NewLogger(opts ...logger.Option) *eventLogger {
options := Options{
Options: logger.Options{
Level: logger.InfoLevel,
Fields: make(map[string]interface{}),
Out: os.Stderr,
Context: context.Background(),
},
Src: "go-micro logger",
Eid: 1,
}
l := &eventLogger{
opts: options,
}
_ = l.Init(opts...)
elog, err := eventlog.Open(l.opts.Src)
if err == nil {
l.elog = elog
}
return l
}
func (l *eventLogger) Init(opts ...logger.Option) error {
for _, o := range opts {
o(&l.opts.Options)
}
if srcname, ok := l.opts.Context.Value(src{}).(string); ok {
l.opts.Src = srcname
}
if neweid, ok := l.opts.Context.Value(eid{}).(uint32); ok {
l.opts.Eid = neweid
}
err := eventlog.InstallAsEventCreate(l.opts.Src, eventlog.Error|eventlog.Warning|eventlog.Info)
if err != nil {
return err
}
if l.elog == nil {
elog, err := eventlog.Open(l.opts.Src)
if err != nil {
return err
}
l.elog = elog
}
return nil
}
func (l *eventLogger) Options() logger.Options {
return l.opts.Options
}
func (l *eventLogger) Fields(fields map[string]interface{}) logger.Logger {
return l
}
func (l *eventLogger) Log(level logger.Level, v ...interface{}) {
l.Logf(level, "%v", v...)
}
func (l *eventLogger) Logf(level logger.Level, format string, v ...interface{}) {
msg := fmt.Sprintf(format, v...)
switch level {
case logger.TraceLevel:
_ = l.elog.Info(l.opts.Eid, msg)
case logger.DebugLevel:
_ = l.elog.Info(l.opts.Eid, msg)
case logger.InfoLevel:
_ = l.elog.Info(l.opts.Eid, msg)
case logger.WarnLevel:
_ = l.elog.Warning(l.opts.Eid, msg)
case logger.ErrorLevel:
_ = l.elog.Error(l.opts.Eid, msg)
case logger.FatalLevel:
_ = l.elog.Error(l.opts.Eid, msg)
}
}
func (l *eventLogger) String() string {
return "windowseventlog"
}