mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-17 07:28:20 +08:00
rewrite
This commit is contained in:
89
pkg/logger/repository/dummy.go
Normal file
89
pkg/logger/repository/dummy.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/pkg/logger"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type DummyLogger struct {
|
||||
}
|
||||
|
||||
func (l *DummyLogger) DebugW(message string, keysAndValues ...interface{}) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) DebugS(message string, fields logger.LogField) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) InfoW(message string, keysAndValues ...interface{}) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) InfoS(message string, fields logger.LogField) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) WarnW(message string, keysAndValues ...interface{}) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) WarnS(message string, fields logger.LogField) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) ErrorW(message string, keysAndValues ...interface{}) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) ErrorS(message string, fields logger.LogField) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Debug(args ...interface{}) {
|
||||
fmt.Println(args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Debugf(format string, args ...interface{}) {
|
||||
fmt.Printf(format, args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Info(args ...interface{}) {
|
||||
fmt.Println(args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Infof(format string, args ...interface{}) {
|
||||
fmt.Printf(format, args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Warn(args ...interface{}) {
|
||||
fmt.Println(args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Warnf(format string, args ...interface{}) {
|
||||
fmt.Printf(format, args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Error(args ...interface{}) {
|
||||
fmt.Println(args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) Errorf(format string, args ...interface{}) {
|
||||
fmt.Printf(format, args...)
|
||||
}
|
||||
|
||||
func (l *DummyLogger) WithPrefix(prefix string) logger.ILogger {
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *DummyLogger) SetLogLevel(level logger.LogLevel) {
|
||||
|
||||
}
|
||||
78
pkg/logger/repository/logrus.go
Normal file
78
pkg/logger/repository/logrus.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/pkg/logger"
|
||||
"errors"
|
||||
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 logger.LogLevel) {
|
||||
switch level {
|
||||
case logger.LogLevelDebug:
|
||||
l.Logger.SetLevel(logrus.DebugLevel)
|
||||
case logger.LogLevelInfo:
|
||||
l.Logger.SetLevel(logrus.InfoLevel)
|
||||
case logger.LogLevelWarn:
|
||||
l.Logger.SetLevel(logrus.WarnLevel)
|
||||
case logger.LogLevelError:
|
||||
l.Logger.SetLevel(logrus.ErrorLevel)
|
||||
default:
|
||||
l.Logger.SetLevel(logrus.InfoLevel)
|
||||
}
|
||||
}
|
||||
|
||||
func getLogOut(filename string, maxSize int64) (*os.File, error) {
|
||||
if filename == "" {
|
||||
return nil, errors.New("failed to log to file, using default stdout")
|
||||
}
|
||||
file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to log to file, using default stdout")
|
||||
}
|
||||
fileinfo, err := file.Stat()
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to get log file stat, using default stdout")
|
||||
}
|
||||
if fileinfo.Size() > maxSize {
|
||||
_ = file.Truncate(0)
|
||||
}
|
||||
return file, nil
|
||||
}
|
||||
|
||||
func NewLogrusLogger(fileName string, maxSize int64, redirectStderr bool) *LogrusLogger {
|
||||
l := logrus.New()
|
||||
l.SetFormatter(
|
||||
&nested.Formatter{
|
||||
FieldsOrder: []string{"Module"},
|
||||
HideKeys: true,
|
||||
NoColors: false,
|
||||
})
|
||||
var file *os.File
|
||||
var err error
|
||||
if fileName != "" {
|
||||
file, err = getLogOut(fileName, maxSize)
|
||||
if err == nil {
|
||||
l.Out = io.MultiWriter(file, os.Stdout)
|
||||
} else {
|
||||
l.Warnf(err.Error())
|
||||
}
|
||||
}
|
||||
if redirectStderr && file != nil {
|
||||
l.Info("panic/stderr redirect to log file")
|
||||
if _, err = paniclog.RedirectStderr(file); err != nil {
|
||||
l.Warnf("Failed to redirect stderr to to file: %s", err)
|
||||
}
|
||||
}
|
||||
return &LogrusLogger{
|
||||
Entry: logrus.NewEntry(l),
|
||||
}
|
||||
}
|
||||
162
pkg/logger/repository/zap.go
Normal file
162
pkg/logger/repository/zap.go
Normal file
@@ -0,0 +1,162 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/pkg/logger"
|
||||
"github.com/mattn/go-colorable"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"time"
|
||||
)
|
||||
|
||||
var _logLevelMap = map[logger.LogLevel]zapcore.Level{
|
||||
logger.LogLevelDebug: zapcore.DebugLevel,
|
||||
logger.LogLevelInfo: zapcore.InfoLevel,
|
||||
logger.LogLevelWarn: zapcore.WarnLevel,
|
||||
logger.LogLevelError: zapcore.ErrorLevel,
|
||||
}
|
||||
|
||||
var (
|
||||
_levelToCapitalColorString = make(map[zapcore.Level]string, len(logger.LogColorMap))
|
||||
)
|
||||
|
||||
func init() {
|
||||
for level, color := range logger.LogColorMap {
|
||||
_levelToCapitalColorString[_logLevelMap[level]] = color.Add("[" + _logLevelMap[level].CapitalString() + "]")
|
||||
}
|
||||
}
|
||||
|
||||
// reference tp https://blog.sandipb.net/2018/05/03/using-zap-creating-custom-encoders/
|
||||
func syslogTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format("Jan 2 15:04:05"))
|
||||
}
|
||||
|
||||
func customLevelEncoder(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
||||
s, ok := _levelToCapitalColorString[level]
|
||||
if !ok {
|
||||
s = logger.LogColorRed.Add(level.CapitalString())
|
||||
}
|
||||
enc.AppendString(s)
|
||||
}
|
||||
|
||||
func customNamedEncoder(loggerName string, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(logger.LogColorMagenta.Add("[" + loggerName + "]"))
|
||||
}
|
||||
|
||||
type zapLoggerImpl struct {
|
||||
*zap.SugaredLogger
|
||||
level zap.AtomicLevel
|
||||
}
|
||||
|
||||
type namedZapLoggerImpl struct {
|
||||
*zap.SugaredLogger
|
||||
parent *zapLoggerImpl
|
||||
}
|
||||
|
||||
func (n *namedZapLoggerImpl) WithPrefix(prefix string) logger.ILogger {
|
||||
return n.parent.WithPrefix(prefix)
|
||||
}
|
||||
|
||||
func (n *namedZapLoggerImpl) SetLogLevel(level logger.LogLevel) {
|
||||
n.parent.SetLogLevel(level)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) DebugW(message string, keysAndValues ...interface{}) {
|
||||
z.Debugw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) InfoW(message string, keysAndValues ...interface{}) {
|
||||
z.Infow(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) WarnW(message string, keysAndValues ...interface{}) {
|
||||
z.Warnw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) ErrorW(message string, keysAndValues ...interface{}) {
|
||||
z.Errorw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) DebugS(message string, fields logger.LogField) {
|
||||
z.Debugw(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) InfoS(message string, fields logger.LogField) {
|
||||
z.Infow(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) WarnS(message string, fields logger.LogField) {
|
||||
z.Warnw(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *namedZapLoggerImpl) ErrorS(message string, fields logger.LogField) {
|
||||
z.Errorw(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func NewZapLogger() logger.ILogger {
|
||||
zapLog, _ := zap.NewProduction()
|
||||
sugar := zapLog.Sugar()
|
||||
return &zapLoggerImpl{SugaredLogger: sugar}
|
||||
}
|
||||
|
||||
func NewZapColoredLogger() logger.ILogger {
|
||||
cfg := zap.NewProductionEncoderConfig()
|
||||
level := zap.NewAtomicLevel()
|
||||
level.SetLevel(zapcore.DebugLevel)
|
||||
cfg.EncodeLevel = customLevelEncoder
|
||||
cfg.EncodeTime = syslogTimeEncoder
|
||||
cfg.EncodeName = customNamedEncoder
|
||||
cfg.ConsoleSeparator = " "
|
||||
zapLog := zap.New(zapcore.NewCore(
|
||||
zapcore.NewConsoleEncoder(cfg),
|
||||
zapcore.AddSync(colorable.NewColorableStdout()),
|
||||
level,
|
||||
))
|
||||
sugar := zapLog.Sugar()
|
||||
return &zapLoggerImpl{SugaredLogger: sugar, level: level}
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) Dispose() error {
|
||||
_ = z.Sync()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) WithPrefix(prefix string) logger.ILogger {
|
||||
return &namedZapLoggerImpl{SugaredLogger: z.SugaredLogger.Named(prefix), parent: z}
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) SetLogLevel(level logger.LogLevel) {
|
||||
z.level.SetLevel(_logLevelMap[level])
|
||||
return
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) DebugW(message string, keysAndValues ...interface{}) {
|
||||
z.Debugw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) InfoW(message string, keysAndValues ...interface{}) {
|
||||
z.Infow(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) WarnW(message string, keysAndValues ...interface{}) {
|
||||
z.Warnw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) ErrorW(message string, keysAndValues ...interface{}) {
|
||||
z.Errorw(message, keysAndValues...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) DebugS(message string, fields logger.LogField) {
|
||||
z.Debugw(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) InfoS(message string, fields logger.LogField) {
|
||||
z.Infow(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) WarnS(message string, fields logger.LogField) {
|
||||
z.Warnw(message, fields.Flatten()...)
|
||||
}
|
||||
|
||||
func (z *zapLoggerImpl) ErrorS(message string, fields logger.LogField) {
|
||||
z.Errorw(message, fields.Flatten()...)
|
||||
}
|
||||
9
pkg/logger/repository/zap_test.go
Normal file
9
pkg/logger/repository/zap_test.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package repository
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestNewZapLogger(t *testing.T) {
|
||||
l := NewZapColoredLogger()
|
||||
l.Infof("asdfasdf %s", "aaa")
|
||||
l.WithPrefix("prefix").Infof("111 %s", "aaa")
|
||||
}
|
||||
Reference in New Issue
Block a user