代码拉取完成,页面将自动刷新
//go:build windows
// +build windows
package windowseventlog
import (
"context"
"fmt"
"os"
"gitee.com/sasukebo/go-micro/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"
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。