unify all panic event to panic log file (#2250)

This commit is contained in:
Cytown
2026-04-01 23:26:49 +08:00
committed by GitHub
parent 31afad6e87
commit e2a9bb97c7
6 changed files with 34 additions and 11 deletions
+29 -11
View File
@@ -2,12 +2,15 @@ package logger
import (
"fmt"
"io"
"os"
"path/filepath"
"runtime/debug"
"time"
)
var panicWriter io.WriteCloser
func InitPanic(filePath string) (func(), error) {
if err := os.MkdirAll(filepath.Dir(filePath), 0o755); err != nil {
return nil, fmt.Errorf("failed to create log directory: %w", err)
@@ -16,21 +19,36 @@ func InitPanic(filePath string) (func(), error) {
if writer == nil {
return nil, fmt.Errorf("failed to create log file: %s", filePath)
}
if panicWriter != nil {
_ = panicWriter.Close()
}
panicWriter = writer
return func() {
defer writer.Close()
defer func() {
writer.Close()
panicWriter = nil
}()
if err := recover(); err != nil {
now := time.Now().Format("2006-01-02 15:04:05")
stack := debug.Stack()
logMsg := "\n\n====================\n[" + now + "] PANIC OCCURRED: " + fmt.Sprintf(
"%v",
err,
) + "\n" + string(
stack,
)
writer.Write([]byte(logMsg))
RecoverPanicNoExit(err)
os.Exit(1)
}
}, nil
}
func RecoverPanicNoExit(err any) {
if panicWriter == nil {
Errorf("panicWriter is nil, should not happen")
return
}
now := time.Now().Format("2006-01-02 15:04:05")
stack := debug.Stack()
logMsg := "\n\n====================\n[" + now + "] PANIC OCCURRED: " + fmt.Sprintf(
"%v",
err,
) + "\n" + string(
stack,
)
panicWriter.Write([]byte(logMsg))
}