From cd4b2fefe97ff737e712f59930ffd034962d06db Mon Sep 17 00:00:00 2001 From: Kevin Parsons Date: Thu, 13 Dec 2018 17:23:55 -0800 Subject: [PATCH] Change from reflection to type switch in Logrus hook --- pkg/etw/eventmetadata.go | 3 ++- pkg/etwlogrus/hook.go | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/etw/eventmetadata.go b/pkg/etw/eventmetadata.go index 39e9909..2539941 100644 --- a/pkg/etw/eventmetadata.go +++ b/pkg/etw/eventmetadata.go @@ -8,7 +8,8 @@ import ( // InType indicates the type of data contained in the ETW event. type InType byte -// Various InType definitions for TraceLogging. +// Various InType definitions for TraceLogging. These must match the definitions +// found in TraceLoggingProvider.h in the Windows SDK. const ( InTypeNull InType = iota InTypeUnicodeString diff --git a/pkg/etwlogrus/hook.go b/pkg/etwlogrus/hook.go index 230e6f8..e13747c 100644 --- a/pkg/etwlogrus/hook.go +++ b/pkg/etwlogrus/hook.go @@ -57,10 +57,10 @@ func (h *Hook) Fire(e *logrus.Entry) error { event.Data.AddString(e.Message) for k, v := range e.Data { - switch reflect.TypeOf(v).Kind() { - case reflect.String: + switch v := v.(type) { + case string: event.Metadata.AddField(k, etw.InTypeAnsiString) - event.Data.AddString(v.(string)) + event.Data.AddString(v) default: event.Metadata.AddField(k, etw.InTypeAnsiString) event.Data.AddString(fmt.Sprintf(" %v", reflect.TypeOf(v), v))