From 3af23789a16a1b13a2163b45519affa04b004e72 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 1 Apr 2025 10:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/pkg/github.com/name5566/leaf/log/log.go | 6 ++++++ .../pkg/github.com/name5566/leaf/module/skeleton.go | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/server/pkg/github.com/name5566/leaf/log/log.go b/src/server/pkg/github.com/name5566/leaf/log/log.go index dcc0e4a0..df5dd6bd 100644 --- a/src/server/pkg/github.com/name5566/leaf/log/log.go +++ b/src/server/pkg/github.com/name5566/leaf/log/log.go @@ -6,6 +6,7 @@ import ( "log" "os" "path" + "runtime" "strings" "sync" "time" @@ -238,6 +239,11 @@ func Error(format string, a ...interface{}) { if gLogger == nil { return } + // Capture the stack trace + stack := make([]byte, 1024) + length := runtime.Stack(stack, false) + format = fmt.Sprintf("%s\nStack trace:\n%s", format, stack[:length]) + gLogger.doPrintf(errorLevel, printErrorLevel, format, a...) } diff --git a/src/server/pkg/github.com/name5566/leaf/module/skeleton.go b/src/server/pkg/github.com/name5566/leaf/module/skeleton.go index 262aa834..df993fb0 100644 --- a/src/server/pkg/github.com/name5566/leaf/module/skeleton.go +++ b/src/server/pkg/github.com/name5566/leaf/module/skeleton.go @@ -3,7 +3,8 @@ package module import ( "server/pkg/github.com/name5566/leaf/chanrpc" "server/pkg/github.com/name5566/leaf/console" - "server/pkg/github.com/name5566/leaf/go" + g "server/pkg/github.com/name5566/leaf/go" + logger "server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/timer" "time" ) @@ -43,9 +44,15 @@ func (s *Skeleton) Init() { } func (s *Skeleton) Run(closeSig chan bool) { + defer func() { + if err := recover(); err != nil { + logger.Error("skeleton run panic: %v", err) + } + }() for { select { case <-closeSig: + logger.Debug("close signal received") s.commandServer.Close() s.server.Close() for !s.g.Idle() || !s.client.Idle() {