github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/ngaut/log/crash_win.go (about) 1 // +build windows 2 3 package log 4 5 import ( 6 "log" 7 "os" 8 "syscall" 9 ) 10 11 var ( 12 kernel32 = syscall.MustLoadDLL("kernel32.dll") 13 procSetStdHandle = kernel32.MustFindProc("SetStdHandle") 14 ) 15 16 func setStdHandle(stdhandle int32, handle syscall.Handle) error { 17 r0, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) 18 if r0 == 0 { 19 if e1 != 0 { 20 return error(e1) 21 } 22 return syscall.EINVAL 23 } 24 return nil 25 } 26 27 func CrashLog(file string) { 28 f, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) 29 if err != nil { 30 log.Println(err.Error()) 31 } else { 32 err = setStdHandle(syscall.STD_ERROR_HANDLE, syscall.Handle(f.Fd())) 33 if err != nil { 34 log.Println(err.Error()) 35 } 36 } 37 }