[PATCH gio] app/internal/log: add logger for Windows DebugView
Export this patch
From: mural <mural@ctli.io>
Signed-off-by: mural <mural@ctli.io>
---
app/internal/log/log_windows.go | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 app/internal/log/log_windows.go
diff --git a/app/internal/log/log_windows.go b/app/internal/log/log_windows.go
new file mode 100644
index 0000000..c7691d2
--- /dev/null
+++ b/app/internal/log/log_windows.go
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: Unlicense OR MIT
+
+package log
+
+import (
+ "log"
+ "syscall"
+ "unsafe"
+)
+
+type logger struct{}
+
+var (
+ kernel32 = syscall.NewLazyDLL("kernel32")
+ outputDebugStringW = kernel32.NewProc("OutputDebugStringW")
+ out logger
+)
+
+func init() {
+ // Windows DbgView already includes timestamps.
+ log.SetFlags(log.Flags() &^ log.LstdFlags)
+ log.SetOutput(&out)
+}
+
+func (l *logger) Write(buf []byte) (int, error) {
+ p, err := syscall.UTF16PtrFromString(string(buf))
+ if err != nil {
+ return 0, err
+ }
+ outputDebugStringW.Call(uintptr(unsafe.Pointer(p)))
+ return len(buf), nil
+}
--
2.24.1