From 228285f69393b841b229e02f92448b84eda96eb6 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 9 Oct 2020 15:13:45 +1100 Subject: [PATCH] Support Print logging --- v2/internal/logger/default_logger.go | 39 ++++++++++++++----- v2/internal/messagedispatcher/message/log.go | 3 +- v2/internal/runtime/goruntime/log.go | 6 +++ v2/internal/subsystem/log.go | 2 + .../kitchensink/frontend/package-lock.json | 24 ++++++------ v2/test/kitchensink/frontend/package.json | 8 ++-- .../frontend/src/pages/logging/Logging.svelte | 6 +-- .../frontend/src/pages/logging/code.go | 2 + .../frontend/src/pages/logging/code.jsx | 1 + v2/test/kitchensink/logger.go | 5 +++ v2/test/kitchensink/main.go | 2 + 11 files changed, 69 insertions(+), 29 deletions(-) diff --git a/v2/internal/logger/default_logger.go b/v2/internal/logger/default_logger.go index 52b06a077..734c2d63c 100644 --- a/v2/internal/logger/default_logger.go +++ b/v2/internal/logger/default_logger.go @@ -2,12 +2,13 @@ package logger import ( "os" + "github.com/wailsapp/wails/v2/pkg/logger" ) // Logger is a utlility to log messages to a number of destinations type Logger struct { - output logger.Logger + output logger.Logger logLevel uint8 showLevelInLog bool } @@ -18,7 +19,7 @@ func New(output logger.Logger) *Logger { result := &Logger{ logLevel: INFO, showLevelInLog: true, - output: output, + output: output, } return result } @@ -42,7 +43,7 @@ func (l *Logger) SetLogLevel(level uint8) { // Writeln writes directly to the output with no log level // Appends a carriage return to the message func (l *Logger) Writeln(message string) error { - return l.output.Print(message+"\n") + return l.output.Print(message + "\n") } // Write writes directly to the output with no log level @@ -50,9 +51,18 @@ func (l *Logger) Write(message string) error { return l.output.Print(message) } +// Print writes directly to the output with no log level +// Appends a carriage return to the message +func (l *Logger) Print(message string) error { + return l.Write(message) +} + // Trace level logging. Works like Sprintf. func (l *Logger) Trace(format string, args ...interface{}) error { - return l.output.Trace(format, args...) + if l.logLevel <= TRACE { + return l.output.Trace(format, args...) + } + return nil } // // CustomTrace returns a custom Logging function that will insert the given name before the message @@ -65,23 +75,34 @@ func (l *Logger) Trace(format string, args ...interface{}) error { // Debug level logging. Works like Sprintf. func (l *Logger) Debug(format string, args ...interface{}) error { - return l.output.Debug(format, args...) + if l.logLevel <= DEBUG { + return l.output.Debug(format, args...) + } + return nil } // Info level logging. Works like Sprintf. func (l *Logger) Info(format string, args ...interface{}) error { - return l.output.Info(format, args...) + if l.logLevel <= INFO { + return l.output.Info(format, args...) + } + return nil } // Warning level logging. Works like Sprintf. func (l *Logger) Warning(format string, args ...interface{}) error { - return l.output.Warning(format, args...) + if l.logLevel <= WARNING { + return l.output.Warning(format, args...) + } + return nil } // Error level logging. Works like Sprintf. func (l *Logger) Error(format string, args ...interface{}) error { - return l.output.Error(format, args...) - + if l.logLevel <= ERROR { + return l.output.Error(format, args...) + } + return nil } // Fatal level logging. Works like Sprintf. diff --git a/v2/internal/messagedispatcher/message/log.go b/v2/internal/messagedispatcher/message/log.go index 94af06480..545deff4c 100644 --- a/v2/internal/messagedispatcher/message/log.go +++ b/v2/internal/messagedispatcher/message/log.go @@ -3,6 +3,7 @@ package message import "fmt" var logMessageMap = map[byte]string{ + 'P': "log:print", 'T': "log:trace", 'D': "log:debug", 'I': "log:info", @@ -13,7 +14,7 @@ var logMessageMap = map[byte]string{ // logMessageParser does what it says on the tin! func logMessageParser(message string) (*parsedMessage, error) { - + // Sanity check: Log messages must be at least 2 bytes if len(message) < 2 { return nil, fmt.Errorf("log message was an invalid length") diff --git a/v2/internal/runtime/goruntime/log.go b/v2/internal/runtime/goruntime/log.go index 2a4d52b16..013b26dcd 100644 --- a/v2/internal/runtime/goruntime/log.go +++ b/v2/internal/runtime/goruntime/log.go @@ -6,6 +6,7 @@ import ( // Log defines all Log related operations type Log interface { + Print(message string) Trace(message string) Debug(message string) Info(message string) @@ -25,6 +26,11 @@ func newLog(bus *servicebus.ServiceBus) Log { } } +// Print prints a Print level message +func (r *log) Print(message string) { + r.bus.Publish("log:print", message) +} + // Trace prints a Trace level message func (r *log) Trace(message string) { r.bus.Publish("log:trace", message) diff --git a/v2/internal/subsystem/log.go b/v2/internal/subsystem/log.go index c6f335928..bc151cc73 100644 --- a/v2/internal/subsystem/log.go +++ b/v2/internal/subsystem/log.go @@ -57,6 +57,8 @@ func (l *Log) Start() error { case logMessage := <-l.logChannel: logType := strings.TrimPrefix(logMessage.Topic(), "log:") switch logType { + case "print": + l.logger.Print(logMessage.Data().(string)) case "trace": l.logger.Trace(logMessage.Data().(string)) case "debug": diff --git a/v2/test/kitchensink/frontend/package-lock.json b/v2/test/kitchensink/frontend/package-lock.json index 55cebfd51..a2c0e2ce3 100644 --- a/v2/test/kitchensink/frontend/package-lock.json +++ b/v2/test/kitchensink/frontend/package-lock.json @@ -124,9 +124,9 @@ } }, "@wails/runtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@wails/runtime/-/runtime-1.0.0.tgz", - "integrity": "sha512-YKL9k4ZRvltnN9Io4gM03u7bk7VX9YjDLu8BdkaHws+3Tt0H+NKt/XnMTo9beUZdPDYnQOgAo5CTxR5UP+n/xA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wails/runtime/-/runtime-1.0.1.tgz", + "integrity": "sha512-zAhPm1eTZ7f7IsE2II0HoDvCtnttj7ah3gzCTpoAd9zltuoao6aU7m1RMsuqLvd/zvdsA4bKywmVjsa2O4zJpQ==", "dev": true }, "alphanum-sort": { @@ -965,9 +965,9 @@ } }, "halfmoon": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/halfmoon/-/halfmoon-1.1.0.tgz", - "integrity": "sha512-KgZvQLSvSbu+6foGatWcQHtlkCbmDqn43I7F/DCvdSomDrNCz0Vv3qD4JvHjBbx2IhN9B20u2MNE9yyZPOEQfQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/halfmoon/-/halfmoon-1.1.1.tgz", + "integrity": "sha512-w/ydT3CixxxxdJP4a3sqSzUnCJFmhvcqE2vQOIsWCfevpqanKlbGQNUwKJH0nKvo13M89eetM3R0gsTOfNLGHA==", "dev": true }, "handlebars": { @@ -2956,9 +2956,9 @@ "dev": true }, "rollup": { - "version": "2.28.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.28.2.tgz", - "integrity": "sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.29.0.tgz", + "integrity": "sha512-gtU0sjxMpsVlpuAf4QXienPmUAhd6Kc7owQ4f5lypoxBW18fw2UNYZ4NssLGsri6WhUZkE/Ts3EMRebN+gNLiQ==", "dev": true, "requires": { "fsevents": "~2.1.2" @@ -3403,9 +3403,9 @@ } }, "svelte-preprocess": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.3.2.tgz", - "integrity": "sha512-CmIsCr62y34qGS10/SC1l1VkmX0kZR6wncbGgRJ1qJftLDMEaazC3bWqoqAlrqyQFvpO0+xb44GQm4RKi/9sLQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.5.1.tgz", + "integrity": "sha512-fZiLMg+mJzp5y4bsvBtl6wE1WCp+s5L87BoKMONGLXk8HSZD5HuRJzxhM0yhM9LHF0jP5kYG22P2Vc/vrv4I0A==", "dev": true, "requires": { "@types/pug": "^2.0.4", diff --git a/v2/test/kitchensink/frontend/package.json b/v2/test/kitchensink/frontend/package.json index dfceb8bbc..cdce03914 100644 --- a/v2/test/kitchensink/frontend/package.json +++ b/v2/test/kitchensink/frontend/package.json @@ -10,12 +10,12 @@ "devDependencies": { "@rollup/plugin-commonjs": "^11.0.0", "@rollup/plugin-node-resolve": "^7.0.0", - "@wails/runtime": "^1.0.0", + "@wails/runtime": "^1.0.1", "focus-visible": "^5.0.2", - "halfmoon": "^1.1.0", + "halfmoon": "^1.1.1", "postcss": "^8.1.1", "postcss-import": "^12.0.1", - "rollup": "^2.0.0", + "rollup": "^2.29.0", "rollup-plugin-livereload": "^1.0.0", "rollup-plugin-postcss": "^3.1.8", "rollup-plugin-string": "^3.0.0", @@ -24,7 +24,7 @@ "sirv-cli": "^0.4.4", "svelte": "^3.0.0", "svelte-highlight": "^0.6.2", - "svelte-preprocess": "^4.3.2" + "svelte-preprocess": "^4.5.1" }, "dependencies": {} } diff --git a/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte b/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte index f925edb27..94efa0172 100644 --- a/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte +++ b/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte @@ -5,11 +5,11 @@ import jsCode from './code.jsx'; import goCode from './code.go'; - var loglevel = 'Trace'; var message = ''; var isJs = false; - var options = ["Trace", "Debug", "Info", "Warning", "Error", "Fatal"]; + var options = ["Print", "Trace", "Debug", "Info", "Warning", "Error", "Fatal"]; + var loglevel = options[0]; $: lang = isJs ? 'Javascript' : 'Go'; @@ -33,7 +33,7 @@ All methods will log to the console and Fatal will also exit the program. diff --git a/v2/test/kitchensink/frontend/src/pages/logging/code.go b/v2/test/kitchensink/frontend/src/pages/logging/code.go index 45b0e6362..1483ab8f4 100644 --- a/v2/test/kitchensink/frontend/src/pages/logging/code.go +++ b/v2/test/kitchensink/frontend/src/pages/logging/code.go @@ -8,6 +8,8 @@ type MyStruct struct { func (l *MyStruct) WailsInit(runtime *wails.Runtime) error { + runtime.Log.Print(message) + runtime.Log.Trace(message) runtime.Log.Debug(message) runtime.Log.Info(message) runtime.Log.Warning(message) diff --git a/v2/test/kitchensink/frontend/src/pages/logging/code.jsx b/v2/test/kitchensink/frontend/src/pages/logging/code.jsx index e21effdb4..652c2823c 100644 --- a/v2/test/kitchensink/frontend/src/pages/logging/code.jsx +++ b/v2/test/kitchensink/frontend/src/pages/logging/code.jsx @@ -3,6 +3,7 @@ import { Log } from '@wails/runtime'; function doSomeOperation() { // Do things let value = doSomething(); + Log.Print("A raw message"); Log.Trace("I got: " + value); Log.Debug("A debug message"); Log.Info("An Info message"); diff --git a/v2/test/kitchensink/logger.go b/v2/test/kitchensink/logger.go index 2c8c93bdc..aef10a3f9 100644 --- a/v2/test/kitchensink/logger.go +++ b/v2/test/kitchensink/logger.go @@ -16,6 +16,11 @@ func (l *Logger) WailsInit(runtime *wails.Runtime) error { return nil } +// Print will log the given message +func (l *Logger) Print(message string) { + l.runtime.Log.Print(message) +} + // Trace will log the given message func (l *Logger) Trace(message string) { l.runtime.Log.Trace(message) diff --git a/v2/test/kitchensink/main.go b/v2/test/kitchensink/main.go index 227618e2f..8b06166ca 100644 --- a/v2/test/kitchensink/main.go +++ b/v2/test/kitchensink/main.go @@ -2,6 +2,7 @@ package main import ( wails "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/logger" "github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options/mac" ) @@ -22,6 +23,7 @@ func main() { WindowBackgroundIsTranslucent: true, TitleBar: mac.TitleBarHiddenInset(), }, + LogLevel: logger.INFO, }) app.Bind(&Logger{})