From a68aa3c921b765f45b6763cfade423acba833f88 Mon Sep 17 00:00:00 2001 From: Jianhui Zhao Date: Fri, 27 Jun 2025 16:50:51 +0800 Subject: [PATCH] add support log panic while running in daemon mode. Signed-off-by: Jianhui Zhao --- broker.go | 2 ++ device.go | 4 ++++ http.go | 1 + main.go | 15 +++++++++++++++ 4 files changed, 22 insertions(+) diff --git a/broker.go b/broker.go index 5872319..81b9190 100644 --- a/broker.go +++ b/broker.go @@ -122,6 +122,8 @@ func (br *broker) devRegister(dev *device) { } func (br *broker) run() { + defer logPanic() + for { select { case c := <-br.register: diff --git a/device.go b/device.go index 7fb1dbf..bd0245e 100644 --- a/device.go +++ b/device.go @@ -276,6 +276,8 @@ func msgTypeName(typ byte) string { } func (dev *device) readLoop() { + defer logPanic() + logPrefix := dev.conn.RemoteAddr().String() tmr := time.AfterFunc(time.Second*5, func() { @@ -410,6 +412,8 @@ func (dev *device) readLoop() { } func (dev *device) writeLoop() { + defer logPanic() + defer func() { dev.br.unregister <- dev }() diff --git a/http.go b/http.go index 50eedae..f018a4e 100644 --- a/http.go +++ b/http.go @@ -112,6 +112,7 @@ func (rw *HttpProxyWriter) WriteRequest(req *http.Request) { } func doHttpProxy(brk *broker, c net.Conn) { + defer logPanic() defer c.Close() br := bufio.NewReader(c) diff --git a/main.go b/main.go index 3da5a64..d286335 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "context" "os" "runtime" + "runtime/debug" "rttys/config" "rttys/version" @@ -141,6 +142,8 @@ func runRttys(c *cli.Command) error { log.Info().Msg("Build Time: " + version.BuildTime()) } + defer logPanic() + br := newBroker(cfg) go br.run() @@ -150,3 +153,15 @@ func runRttys(c *cli.Command) error { select {} } + +func logPanic() { + if r := recover(); r != nil { + saveCrashLog(r, debug.Stack()) + os.Exit(2) + } +} + +func saveCrashLog(p any, stack []byte) { + log.Error().Msgf("%v", p) + log.Error().Msg(string(stack)) +}