github.com/cybriq/giocore@v0.0.7-0.20210703034601-cfb9cb5f3900/app/internal/log/log_windows.go (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 package log 4 5 import ( 6 "log" 7 "syscall" 8 "unsafe" 9 ) 10 11 type logger struct{} 12 13 var ( 14 kernel32 = syscall.NewLazyDLL("kernel32") 15 outputDebugStringW = kernel32.NewProc("OutputDebugStringW") 16 debugView *logger 17 ) 18 19 func init() { 20 // Windows DebugView already includes timestamps. 21 if syscall.Stderr == 0 { 22 log.SetFlags(log.Flags() &^ log.LstdFlags) 23 log.SetOutput(debugView) 24 } 25 } 26 27 func (l *logger) Write(buf []byte) (int, error) { 28 p, err := syscall.UTF16PtrFromString(string(buf)) 29 if err != nil { 30 return 0, err 31 } 32 outputDebugStringW.Call(uintptr(unsafe.Pointer(p))) 33 return len(buf), nil 34 }