Created
June 2, 2018 10:00
-
-
Save smallnest/4220b86f3a0339c96763ba48cc86738f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://stackoverflow.com/questions/34772012/capturing-panic-in-golang/34772516 | |
// Log the panic under unix to the log file | |
//+build unix | |
package main | |
import ( | |
"log" | |
"os" | |
"syscall" | |
) | |
// redirectStderr to the file passed in | |
func redirectStderr(f *os.File) { | |
err := syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd())) | |
if err != nil { | |
log.Fatalf("Failed to redirect stderr to file: %v", err) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Log the panic under windows to the log file | |
// | |
// Code from minix, via | |
// | |
// http://play.golang.org/p/kLtct7lSUg | |
//+build windows | |
package main | |
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 | |
} | |
// redirectStderr to the file passed in | |
func redirectStderr(f *os.File) { | |
err := setStdHandle(syscall.STD_ERROR_HANDLE, syscall.Handle(f.Fd())) | |
if err != nil { | |
log.Fatalf("Failed to redirect stderr to file: %v", err) | |
} | |
// SetStdHandle does not affect prior references to stderr | |
os.Stderr = f | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment