diff options
author | Nicolas Lacasse <nlacasse@google.com> | 2018-10-03 10:32:35 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-10-03 10:33:56 -0700 |
commit | 55d28fb124dc4caa9047c5ca9150c82f073e70b2 (patch) | |
tree | 746446fa360f2236ae0c972e2bbf0a559c137957 /runsc | |
parent | e215b9970ad82915a8d544b81b3c49d7d84a0eb0 (diff) |
runsc: Dup debug log file to stderr, so sentry panics don't get lost.
Docker and containerd do not expose runsc's stderr, so tracking down sentry
panics can be painful.
If we have a debug log file, we should send panics (and all stderr data) to the
log file.
PiperOrigin-RevId: 215585559
Change-Id: I3844259ed0cd26e26422bcdb40dded302740b8b6
Diffstat (limited to 'runsc')
-rw-r--r-- | runsc/main.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/runsc/main.go b/runsc/main.go index 2a18c4b9e..7e704a127 100644 --- a/runsc/main.go +++ b/runsc/main.go @@ -177,6 +177,10 @@ func main() { if *debugLogFD > -1 { f := os.NewFile(uintptr(*debugLogFD), "debug log file") + // Dup f to stderr so we capture stack traces on panic. + if err := syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd())); err != nil { + cmd.Fatalf("error dup'ing fd %d to stderr: %v", f.Fd(), err) + } e = log.MultiEmitter{e, log.GoogleEmitter{&log.Writer{Next: f}}} } else if *debugLogDir != "" { if err := os.MkdirAll(*debugLogDir, 0775); err != nil { @@ -187,6 +191,10 @@ func main() { if err != nil { cmd.Fatalf("error opening debug log file in %q: %v", *debugLogDir, err) } + // Dup f to stderr so we capture stack traces on panic. + if err := syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd())); err != nil { + cmd.Fatalf("error dup'ing fd %d to stderr: %v", f.Fd(), err) + } e = log.MultiEmitter{e, log.GoogleEmitter{&log.Writer{Next: f}}} } |