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  }