mirror of https://github.com/rocboss/paopao-ce
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.0 KiB
142 lines
3.0 KiB
package conf
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/meilisearch/meilisearch-go"
|
|
"github.com/rocboss/paopao-ce/pkg/json"
|
|
"github.com/sirupsen/logrus"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
"gopkg.in/resty.v1"
|
|
)
|
|
|
|
type logData struct {
|
|
Time time.Time `json:"time"`
|
|
Level logrus.Level `json:"level"`
|
|
Message string `json:"message"`
|
|
Data logrus.Fields `json:"data"`
|
|
}
|
|
|
|
type zincLogIndex struct {
|
|
Index map[string]string `json:"index"`
|
|
}
|
|
|
|
type zincLogHook struct {
|
|
host string
|
|
index string
|
|
user string
|
|
password string
|
|
}
|
|
|
|
type meiliLogHook struct {
|
|
index *meilisearch.Index
|
|
}
|
|
|
|
func (h *zincLogHook) Fire(entry *logrus.Entry) error {
|
|
index := &zincLogIndex{
|
|
Index: map[string]string{
|
|
"_index": h.index,
|
|
},
|
|
}
|
|
indexBytes, _ := json.Marshal(index)
|
|
|
|
data := &logData{
|
|
Time: entry.Time,
|
|
Level: entry.Level,
|
|
Message: entry.Message,
|
|
Data: entry.Data,
|
|
}
|
|
dataBytes, _ := json.Marshal(data)
|
|
|
|
logStr := string(indexBytes) + "\n" + string(dataBytes) + "\n"
|
|
client := resty.New()
|
|
|
|
if _, err := client.SetDisableWarn(true).R().
|
|
SetHeader("Content-Type", "application/json").
|
|
SetBasicAuth(h.user, h.password).
|
|
SetBody(logStr).
|
|
Post(h.host); err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (h *zincLogHook) Levels() []logrus.Level {
|
|
return logrus.AllLevels
|
|
}
|
|
|
|
func (h *meiliLogHook) Fire(entry *logrus.Entry) error {
|
|
data := &logData{
|
|
Time: entry.Time,
|
|
Level: entry.Level,
|
|
Message: entry.Message,
|
|
Data: entry.Data,
|
|
}
|
|
if _, err := h.index.AddDocuments(data); err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (h *meiliLogHook) Levels() []logrus.Level {
|
|
return logrus.AllLevels
|
|
}
|
|
|
|
func newZincLogHook() *zincLogHook {
|
|
return &zincLogHook{
|
|
host: loggerZincSetting.Endpoint() + "/es/_bulk",
|
|
index: loggerZincSetting.Index,
|
|
user: loggerZincSetting.User,
|
|
password: loggerZincSetting.Password,
|
|
}
|
|
}
|
|
|
|
func newMeiliLogHook() *meiliLogHook {
|
|
client := meilisearch.NewClient(meilisearch.ClientConfig{
|
|
Host: loggerMeiliSetting.Endpoint(),
|
|
APIKey: loggerMeiliSetting.ApiKey,
|
|
})
|
|
|
|
index := client.Index(loggerMeiliSetting.Index)
|
|
if _, err := index.FetchInfo(); err != nil {
|
|
logrus.Debugf("newMeiliLogHook create index because fetch index info error: %v", err)
|
|
client.CreateIndex(&meilisearch.IndexConfig{
|
|
Uid: loggerMeiliSetting.Index,
|
|
})
|
|
}
|
|
|
|
return &meiliLogHook{
|
|
index: index,
|
|
}
|
|
}
|
|
|
|
func newFileLogger() io.Writer {
|
|
return &lumberjack.Logger{
|
|
Filename: loggerFileSetting.SavePath + "/" + loggerFileSetting.FileName + loggerFileSetting.FileExt,
|
|
MaxSize: 600,
|
|
MaxAge: 10,
|
|
LocalTime: true,
|
|
}
|
|
}
|
|
|
|
func setupLogger() {
|
|
logrus.SetFormatter(&logrus.JSONFormatter{})
|
|
logrus.SetLevel(LoggerSetting.logLevel())
|
|
|
|
if CfgIf("LoggerFile") {
|
|
out := newFileLogger()
|
|
logrus.SetOutput(out)
|
|
} else if CfgIf("LoggerZinc") {
|
|
hook := newZincLogHook()
|
|
logrus.SetOutput(io.Discard)
|
|
logrus.AddHook(hook)
|
|
} else if CfgIf("LoggerMeili") {
|
|
hook := newMeiliLogHook()
|
|
logrus.SetOutput(io.Discard)
|
|
logrus.AddHook(hook)
|
|
}
|
|
}
|