feat: 实现 panic 日志打印到文件中

This commit is contained in:
zhengkunwang223 2023-03-07 14:16:26 +08:00
parent e3c78fd57d
commit b0aac42e6f
2 changed files with 15 additions and 1 deletions

View file

@ -8,10 +8,12 @@ import (
"log" "log"
"os" "os"
"path" "path"
"runtime"
"sort" "sort"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"syscall"
"time" "time"
"unsafe" "unsafe"
) )
@ -78,6 +80,8 @@ var _asyncBufferPool = sync.Pool{
}, },
} }
var stdErrFileHandler *os.File
func NewWriterFromConfig(c *Config) (RollingWriter, error) { func NewWriterFromConfig(c *Config) (RollingWriter, error) {
if c.LogPath == "" || c.FileName == "" { if c.LogPath == "" || c.FileName == "" {
return nil, ErrInvalidArgument return nil, ErrInvalidArgument
@ -92,6 +96,16 @@ func NewWriterFromConfig(c *Config) (RollingWriter, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
stdErrFileHandler = file
if runtime.GOOS != "windows" {
if err = syscall.Dup2(int(file.Fd()), int(os.Stderr.Fd())); err != nil {
return nil, err
}
runtime.SetFinalizer(stdErrFileHandler, func(fd *os.File) {
fd.Close()
})
}
mng, err := NewManager(c) mng, err := NewManager(c)
if err != nil { if err != nil {

View file

@ -28,8 +28,8 @@ import (
func Start() { func Start() {
viper.Init() viper.Init()
app.Init()
log.Init() log.Init()
app.Init()
db.Init() db.Init()
migration.Init() migration.Init()
validator.Init() validator.Init()