mirror of
https://gitee.ltd/lxh/logger.git
synced 2025-10-23 06:46:15 +08:00
71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package zap_logger
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
customencoder "gitee.ltd/lxh/logger/v2/encoder"
|
|
"gitee.ltd/lxh/logger/v2/write"
|
|
"github.com/grafana/loki-client-go/loki"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
type LokiLogger struct {
|
|
Encoder string `json:"encoder"`
|
|
Level string `json:"level"`
|
|
Enable bool `yaml:"enable"`
|
|
Host string `yaml:"host"`
|
|
Port int `yaml:"port"`
|
|
Source string `yaml:"source"`
|
|
Service string `yaml:"service"`
|
|
Job string `yaml:"job"`
|
|
Environment string `yaml:"environment"`
|
|
|
|
lokiClient *loki.Client
|
|
}
|
|
|
|
func newLokiLogger(lokiConf *Loki) *LokiLogger {
|
|
lokiConfig := &LokiLogger{
|
|
Enable: lokiConf.Enable,
|
|
Encoder: lokiConf.Encoder,
|
|
Level: lokiConf.Level,
|
|
Host: lokiConf.Host,
|
|
Port: lokiConf.Port,
|
|
Source: lokiConf.Source,
|
|
Service: lokiConf.Service,
|
|
Job: lokiConf.Job,
|
|
Environment: lokiConf.Environment,
|
|
}
|
|
|
|
lc, err := loki.NewWithDefault(fmt.Sprintf("%v:%v/loki/api/v1/push", lokiConfig.Host, lokiConfig.Port))
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
lokiConfig.lokiClient = lc
|
|
return lokiConfig
|
|
}
|
|
|
|
func (l *LokiLogger) Init() zapcore.Core {
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|
encoderConfig.TimeKey = "time"
|
|
encoderConfig.EncodeTime = func(time time.Time, encoder zapcore.PrimitiveArrayEncoder) {
|
|
encoder.AppendString(time.Format("2006-01-02 15:04:05.000"))
|
|
}
|
|
|
|
writer := zapcore.AddSync(write.NewLokiWriter(l.lokiClient, l.Encoder, l.Job, l.Source, l.Environment))
|
|
var encoder zapcore.Encoder
|
|
switch l.Encoder {
|
|
case "json":
|
|
encoder = customencoder.NewJsonEncoder(encoderConfig)
|
|
case "console":
|
|
encoder = zapcore.NewConsoleEncoder(encoderConfig)
|
|
}
|
|
|
|
level, _ := zapcore.ParseLevel(strings.ToLower(l.Level))
|
|
|
|
return zapcore.NewCore(encoder, writer, level)
|
|
}
|