feat: first version.

This commit is contained in:
tx7do
2023-05-21 10:04:15 +08:00
parent 3656de9753
commit 785443dd84
51 changed files with 15841 additions and 0 deletions

178
logger.go Normal file
View File

@@ -0,0 +1,178 @@
package bootstrap
import (
"os"
"github.com/sirupsen/logrus"
aliyunLogger "github.com/go-kratos/kratos/contrib/log/aliyun/v2"
fluentLogger "github.com/go-kratos/kratos/contrib/log/fluent/v2"
logrusLogger "github.com/go-kratos/kratos/contrib/log/logrus/v2"
tencentLogger "github.com/go-kratos/kratos/contrib/log/tencent/v2"
zapLogger "github.com/go-kratos/kratos/contrib/log/zap/v2"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/tracing"
"github.com/tx7do/kratos-bootstrap/gen/api/go/conf/v1"
)
type LoggerType string
const (
LoggerTypeStd LoggerType = "std"
LoggerTypeFluent LoggerType = "fluent"
LoggerTypeLogrus LoggerType = "logrus"
LoggerTypeZap LoggerType = "zap"
LoggerTypeAliyun LoggerType = "aliyun"
LoggerTypeTencent LoggerType = "tencent"
)
// NewLoggerProvider 创建一个新的日志记录器提供者
func NewLoggerProvider(cfg *conf.Logger, serviceInfo *ServiceInfo) log.Logger {
l := NewLogger(cfg)
return log.With(
l,
"service.id", serviceInfo.Id,
"service.name", serviceInfo.Name,
"service.version", serviceInfo.Version,
"ts", log.DefaultTimestamp,
"caller", log.DefaultCaller,
"trace_id", tracing.TraceID(),
"span_id", tracing.SpanID(),
)
}
// NewLogger 创建一个新的日志记录器
func NewLogger(cfg *conf.Logger) log.Logger {
if cfg == nil {
return NewStdLogger()
}
switch LoggerType(cfg.Type) {
default:
fallthrough
case LoggerTypeStd:
return NewStdLogger()
case LoggerTypeFluent:
return NewFluentLogger(cfg)
case LoggerTypeZap:
return NewZapLogger(cfg)
case LoggerTypeLogrus:
return NewLogrusLogger(cfg)
case LoggerTypeAliyun:
return NewAliyunLogger(cfg)
case LoggerTypeTencent:
return NewTencentLogger(cfg)
}
}
// NewStdLogger 创建一个新的日志记录器 - Kratos内置控制台输出
func NewStdLogger() log.Logger {
l := log.NewStdLogger(os.Stdout)
return l
}
// NewZapLogger 创建一个新的日志记录器 - Zap
func NewZapLogger(cfg *conf.Logger) log.Logger {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.TimeKey = "time"
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
jsonEncoder := zapcore.NewJSONEncoder(encoderConfig)
lumberJackLogger := &lumberjack.Logger{
Filename: cfg.Zap.Filename,
MaxSize: int(cfg.Zap.MaxSize),
MaxBackups: int(cfg.Zap.MaxBackups),
MaxAge: int(cfg.Zap.MaxAge),
}
writeSyncer := zapcore.AddSync(lumberJackLogger)
var lvl = new(zapcore.Level)
if err := lvl.UnmarshalText([]byte(cfg.Zap.Level)); err != nil {
return nil
}
core := zapcore.NewCore(jsonEncoder, writeSyncer, lvl)
logger := zap.New(core).WithOptions()
wrapped := zapLogger.NewLogger(logger)
return wrapped
}
// NewLogrusLogger 创建一个新的日志记录器 - Logrus
func NewLogrusLogger(cfg *conf.Logger) log.Logger {
loggerLevel, err := logrus.ParseLevel(cfg.Logrus.Level)
if err != nil {
loggerLevel = logrus.InfoLevel
}
var loggerFormatter logrus.Formatter
switch cfg.Logrus.Formatter {
default:
fallthrough
case "text":
loggerFormatter = &logrus.TextFormatter{
DisableColors: cfg.Logrus.DisableColors,
DisableTimestamp: cfg.Logrus.DisableTimestamp,
TimestampFormat: cfg.Logrus.TimestampFormat,
}
break
case "json":
loggerFormatter = &logrus.JSONFormatter{
DisableTimestamp: cfg.Logrus.DisableTimestamp,
TimestampFormat: cfg.Logrus.TimestampFormat,
}
break
}
logger := logrus.New()
logger.Level = loggerLevel
logger.Formatter = loggerFormatter
wrapped := logrusLogger.NewLogger(logger)
return wrapped
}
// NewFluentLogger 创建一个新的日志记录器 - Fluent
func NewFluentLogger(cfg *conf.Logger) log.Logger {
wrapped, err := fluentLogger.NewLogger(cfg.Fluent.Endpoint)
if err != nil {
panic("create fluent logger failed")
return nil
}
return wrapped
}
// NewAliyunLogger 创建一个新的日志记录器 - Aliyun
func NewAliyunLogger(cfg *conf.Logger) log.Logger {
wrapped := aliyunLogger.NewAliyunLog(
aliyunLogger.WithProject(cfg.Aliyun.Project),
aliyunLogger.WithEndpoint(cfg.Aliyun.Endpoint),
aliyunLogger.WithAccessKey(cfg.Aliyun.AccessKey),
aliyunLogger.WithAccessSecret(cfg.Aliyun.AccessSecret),
)
return wrapped
}
// NewTencentLogger 创建一个新的日志记录器 - Tencent
func NewTencentLogger(cfg *conf.Logger) log.Logger {
wrapped, err := tencentLogger.NewLogger(
tencentLogger.WithTopicID(cfg.Tencent.TopicId),
tencentLogger.WithEndpoint(cfg.Tencent.Endpoint),
tencentLogger.WithAccessKey(cfg.Tencent.AccessKey),
tencentLogger.WithAccessSecret(cfg.Tencent.AccessSecret),
)
if err != nil {
panic(err)
return nil
}
return wrapped
}