Codebase list golang-github-ngaut-log / upstream/0.0_git20210830.2.0124ec0 crash_win.go
upstream/0.0_git20210830.2.0124ec0

Tree @upstream/0.0_git20210830.2.0124ec0 (Download .tar.gz)

crash_win.go @upstream/0.0_git20210830.2.0124ec0raw · history · blame

// +build windows

package log

import (
	"log"
	"os"
	"syscall"
)

var (
	kernel32         = syscall.MustLoadDLL("kernel32.dll")
	procSetStdHandle = kernel32.MustFindProc("SetStdHandle")
)

func setStdHandle(stdhandle int32, handle syscall.Handle) error {
	r0, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0)
	if r0 == 0 {
		if e1 != 0 {
			return error(e1)
		}
		return syscall.EINVAL
	}
	return nil
}

func CrashLog(file string) {
	f, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
	if err != nil {
		log.Println(err.Error())
	} else {
		err = setStdHandle(syscall.STD_ERROR_HANDLE, syscall.Handle(f.Fd()))
		if err != nil {
			log.Println(err.Error())
		}
	}
}