This commit is contained in:
aynakeya
2024-04-10 00:42:33 -07:00
parent 8d73a3c284
commit f926f15606
145 changed files with 2852 additions and 4296 deletions

View 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) {
}

View 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),
}
}

View 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()...)
}

View 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")
}