2
0
mirror of https://gitee.ltd/lxh/logger.git synced 2025-10-23 14:56:16 +08:00
Files
logger/loki.go
2025-10-14 15:29:34 +08:00

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