Я использую logrus
для ведения журнала моего приложения golang. Однако я также хочу интегрировать это с Elasti c Search так, чтобы все журналы также сбрасывались в elasti c Search при создании записи журнала logrus. В настоящее время все журналы создаются в файле, как показано во фрагменте ниже. Как я могу интегрироваться с поиском elasti c?
type LoggerConfig struct {
Filename string `validate:regexp=.log$`
AppName string `validate:regexp=^[a-zA-Z]$`
}
type AppLogger struct {
Err error
Logger logrus.Entry
}
func Logger(loggerConfig LoggerConfig) AppLogger {
response := new(AppLogger)
// validate the schema of the logger_config
if errs := validator.Validate(loggerConfig); errs != nil {
response.Err = errs
// this sets up the error on the the response struct
}
logrus.SetFormatter(&logrus.JSONFormatter{})
f, err := os.OpenFile(loggerConfig.Filename, os.O_WRONLY|os.O_CREATE, 0755)
if err != nil {
response.Err = err
}
multipleWriter := io.MultiWriter(os.Stdout, f)
logrus.SetOutput(multipleWriter)
contextLogger := logrus.WithFields(logrus.Fields{
"app": loggerConfig.AppName,
})
//logrus.AddHook(hook)
response.Logger = *contextLogger
//response.Logger.Info("adele")
return *response
}
Я пробовал elogrus
, который добавляет хук, но я не уверен, как его использовать. Вот метод, который пытается создать клиент поиска elasti c. Как я могу интегрировать это с экземпляром logrus?
func prepareElasticSearchClient() *elastic.Client {
indexName := "my-server"
client, _ := elastic.NewClientFromConfig(&config.Config{
URL: os.Getenv("ELASTIC_SEARCH_URL_LOGS") + ":" + os.Getenv("ELASTIC_SEARCH_PORT_LOGS"),
Index: indexName,
Username: os.Getenv("ELASTIC_SEARCH_USERNAME_LOGS"),
Password: os.Getenv("ELASTIC_SEARCH_PASSWORD_LOGS"),
})
return client
}
Ранее я использовал такие модули, как Winston
, где было очень легко настроить elasti c ведение журнала поиска, но каким-то образом я нашел небольшую документацию с golang о том, как интегрировать Golang ведение журнала с elasti c search