From 95333b37e65e529cb2a7af9d0cea92212d5f9df9 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Sun, 9 Mar 2025 21:54:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BA=E4=B8=BB=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E5=92=8C=E8=AF=A6=E7=BB=86=E5=BC=82=E5=B8=B8=E6=8D=95?= =?UTF-8?q?=E8=8E=B7=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 init() 函数中创建 logs 目录 - 配置日志输出到 logs/panic.log 文件 - 增强异常捕获逻辑,记录完整的堆栈信息和时间戳 - 优化 panic 恢复处理,提供更详细的错误追踪信息 --- main.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index da8b014..fc23617 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,11 @@ package main import ( + "fmt" "log" + "os" + "path/filepath" + "runtime/debug" "time" "git.lxtend.com/qqbot/config" @@ -12,11 +16,32 @@ import ( "github.com/gin-gonic/gin" ) +func init() { + // 创建logs目录 + if err := os.MkdirAll("logs", 0755); err != nil { + log.Printf("创建logs目录失败: %v", err) + } + + // 设置日志输出到文件 + logFile, err := os.OpenFile(filepath.Join("logs", "panic.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + if err != nil { + log.Printf("打开日志文件失败: %v", err) + return + } + log.SetOutput(logFile) +} + func main() { // 创建 WebSocket 客户端 defer func() { if err := recover(); err != nil { - log.Print("Recovered in main:", err) + // 获取详细的堆栈信息 + stack := debug.Stack() + errMsg := fmt.Sprintf("[%s] Panic recovered:\nError: %v\nStack Trace:\n%s\n", + time.Now().Format("2006-01-02 15:04:05"), err, stack) + + // 写入日志文件 + log.Print(errMsg) } }() defer exec.DockerContainer.RemoveContainer()