Forráskód Böngészése

Add backend kardianos_svc_logger.

ZRY 10 hónapja
szülő
commit
447e47dd1f

+ 8 - 0
hiedabke_kardianos_svc_logger/go.mod

@@ -0,0 +1,8 @@
+module git.swzry.com/zry/GoHiedaLogger/hiedabke_kardianos_svc_logger
+
+go 1.19
+
+require (
+	git.swzry.com/zry/GoHiedaLogger/hiedalog v0.0.0-20221108101125-31cb2911c8e3
+	github.com/kardianos/service v1.2.2
+)

+ 7 - 0
hiedabke_kardianos_svc_logger/go.sum

@@ -0,0 +1,7 @@
+git.swzry.com/zry/GoHiedaLogger/hiedalog v0.0.0-20221108101125-31cb2911c8e3 h1:q8mNtC3oo+RRmIFZAUENv/bM1BojmWknidk6Xx/ZSvM=
+git.swzry.com/zry/GoHiedaLogger/hiedalog v0.0.0-20221108101125-31cb2911c8e3/go.mod h1:NMU7558kNXCUuK0qKYQMtYK/kn2lhwelnij295H3pdU=
+github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60=
+github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM=
+golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
+golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

+ 98 - 0
hiedabke_kardianos_svc_logger/win_eventlog.go

@@ -0,0 +1,98 @@
+//go:build windows
+
+package hiedabke_win_eventlog
+
+import (
+	"fmt"
+	"git.swzry.com/zry/GoHiedaLogger/hiedalog"
+	"github.com/kardianos/service"
+	"strings"
+)
+
+type SvcLoggerBackend struct {
+	SvcLog *service.WindowsLogger
+	enable bool
+}
+
+var _ = hiedalog.HiedaLogBackend(&SvcLoggerBackend{SvcLog: nil})
+
+func NewSvcLoggerBackend(logger *service.WindowsLogger) *SvcLoggerBackend {
+	scb := &SvcLoggerBackend{
+		SvcLog: logger,
+		enable: false,
+	}
+	return scb
+}
+
+func (b *SvcLoggerBackend) Enable() {
+	if b.SvcLog != nil {
+		b.enable = true
+	}
+}
+
+func (b *SvcLoggerBackend) Shutdown() {
+	b.enable = false
+}
+
+func (b *SvcLoggerBackend) EmitStringLog(module string, level hiedalog.HiedaLogLevel, content string) {
+	if !b.enable {
+		return
+	}
+	msg := fmt.Sprintf("<%s> [%s] %s\n", level.Name, module, content)
+	switch {
+	case level.LevelNumber < 3:
+		{
+			_ = b.SvcLog.NError(uint32(level.LevelNumber), msg)
+			break
+		}
+	case level.LevelNumber == 3:
+		{
+			_ = b.SvcLog.NWarning(uint32(level.LevelNumber), msg)
+			break
+		}
+	case level.LevelNumber >= 4:
+		{
+			_ = b.SvcLog.NInfo(uint32(level.LevelNumber), msg)
+			break
+		}
+	}
+}
+
+func (b *SvcLoggerBackend) EmitComplexLog(module string, level hiedalog.HiedaLogLevel, data map[string]string) {
+	if !b.enable {
+		return
+	}
+	b.EmitStringLog(module, level, b.prettyComplexToString(data))
+}
+
+func (b *SvcLoggerBackend) prettyComplexToString(data map[string]string) string {
+	sb := strings.Builder{}
+	scn := 0
+	xr := false
+	if len(data) < 5 {
+		for k, v := range data {
+			scn += len(k) + len(v) + 2
+			if scn > 160 {
+				xr = true
+				break
+			}
+			sb.WriteString(k)
+			sb.WriteRune(':')
+			sb.WriteString(v)
+			sb.WriteString(", ")
+		}
+		if !xr {
+			so := sb.String()
+			return so[:len(so)-2]
+		}
+	}
+	sb = strings.Builder{}
+	sb.WriteRune('\n')
+	for k, v := range data {
+		sb.WriteString(k)
+		sb.WriteRune(':')
+		sb.WriteString(v)
+		sb.WriteRune('\n')
+	}
+	return sb.String()
+}