summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lacasse <nlacasse@google.com>2018-10-03 10:32:35 -0700
committerShentubot <shentubot@google.com>2018-10-03 10:33:56 -0700
commit55d28fb124dc4caa9047c5ca9150c82f073e70b2 (patch)
tree746446fa360f2236ae0c972e2bbf0a559c137957
parente215b9970ad82915a8d544b81b3c49d7d84a0eb0 (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
-rw-r--r--runsc/main.go8
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}}}
}