mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2026-05-12 02:25:00 +08:00
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package logger
|
|
|
|
import (
|
|
"AynaLivePlayer/core/adapter"
|
|
nested "github.com/antonfisher/nested-logrus-formatter"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/virtuald/go-paniclog"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
type LogrusLogger struct {
|
|
*logrus.Entry
|
|
module string
|
|
}
|
|
|
|
func (l *LogrusLogger) SetLogLevel(level adapter.LogLevel) {
|
|
switch level {
|
|
case adapter.LogLevelDebug:
|
|
l.Logger.SetLevel(logrus.DebugLevel)
|
|
case adapter.LogLevelInfo:
|
|
l.Logger.SetLevel(logrus.InfoLevel)
|
|
case adapter.LogLevelWarn:
|
|
l.Logger.SetLevel(logrus.WarnLevel)
|
|
case adapter.LogLevelError:
|
|
l.Logger.SetLevel(logrus.ErrorLevel)
|
|
default:
|
|
l.Logger.SetLevel(logrus.InfoLevel)
|
|
}
|
|
}
|
|
|
|
func NewLogrusLogger(fileName string, redirectStderr bool) *LogrusLogger {
|
|
l := logrus.New()
|
|
l.SetFormatter(
|
|
&nested.Formatter{
|
|
FieldsOrder: []string{"Module"},
|
|
HideKeys: true,
|
|
NoColors: true,
|
|
})
|
|
var file *os.File
|
|
var err error
|
|
if fileName != "" {
|
|
file, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
if err == nil {
|
|
l.Out = io.MultiWriter(file, os.Stdout)
|
|
} else {
|
|
l.Info("Failed to log to file, using default stdout")
|
|
}
|
|
}
|
|
if redirectStderr && file != nil {
|
|
l.Info("panic/stderr redirect to log file")
|
|
if _, err = paniclog.RedirectStderr(file); err != nil {
|
|
l.Infof("Failed to redirect stderr to to file: %s", err)
|
|
}
|
|
}
|
|
return &LogrusLogger{
|
|
Entry: logrus.NewEntry(l),
|
|
}
|
|
}
|
|
|
|
func (l *LogrusLogger) WithModule(prefix string) adapter.ILogger {
|
|
return &LogrusLogger{
|
|
Entry: l.Entry.WithField("Module", prefix),
|
|
module: prefix,
|
|
}
|
|
}
|