diff --git a/wasm/logging.go b/wasm/logging.go
index a39cf7facb418f3f516c6511e258fb7132f69709..15aed1a96d8e4fe93aae7ca372a8c66aca648430 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
 	}
 }