From 45c57d9a1df51140a4a879b1fd595f8be29e03e0 Mon Sep 17 00:00:00 2001 From: Jono Wenger <jono@elixxir.io> Date: Mon, 12 Sep 2022 21:15:58 -0700 Subject: [PATCH] Fix log listener to not create a new object on every listen --- wasm/logging.go | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/wasm/logging.go b/wasm/logging.go index a39cf7fa..15aed1a9 100644 --- a/wasm/logging.go +++ b/wasm/logging.go @@ -56,7 +56,7 @@ func LogLevel(_ js.Value, args []js.Value) interface{} { jww.SetLogThreshold(threshold) jww.SetFlags(log.LstdFlags | log.Lmicroseconds) - ll := &LogListener{threshold, js.Global().Get("console")} + ll := NewLogListener(threshold, js.Global().Get("console")) logListeners = append(logListeners, ll.Listen) jww.SetLogListeners(logListeners...) jww.SetStdoutThreshold(jww.LevelFatal + 1) @@ -184,6 +184,32 @@ func (c *console) Write(p []byte) (n int, err error) { type LogListener struct { jww.Threshold js.Value + + trace *console + debug *console + info *console + error *console + warn *console + critical *console + fatal *console + def *console +} + +// NewLogListener initialises a new log listener that listener for the specific +// threshold and prints the logs to the Javascript console. +func NewLogListener(threshold jww.Threshold, consoleObj js.Value) *LogListener { + return &LogListener{ + Threshold: threshold, + Value: consoleObj, + trace: &console{"debug", consoleObj}, + debug: &console{"log", consoleObj}, + info: &console{"info", consoleObj}, + warn: &console{"warn", consoleObj}, + error: &console{"error", consoleObj}, + critical: &console{"error", consoleObj}, + fatal: &console{"error", consoleObj}, + def: &console{"log", consoleObj}, + } } // Listen is called for every logging event. This function adheres to the @@ -195,21 +221,21 @@ func (ll *LogListener) Listen(t jww.Threshold) io.Writer { switch t { case jww.LevelTrace: - return &console{"debug", ll.Value} + return ll.trace case jww.LevelDebug: - return &console{"log", ll.Value} + return ll.debug case jww.LevelInfo: - return &console{"info", ll.Value} + return ll.info case jww.LevelWarn: - return &console{"warn", ll.Value} + return ll.warn case jww.LevelError: - return &console{"error", ll.Value} + return ll.error case jww.LevelCritical: - return &console{"error", ll.Value} + return ll.critical case jww.LevelFatal: - return &console{"error", ll.Value} + return ll.fatal default: - return &console{"log", ll.Value} + return ll.def } } -- GitLab