Журналы Golang Logrus доступны в консоли, но не отправляются в Loggly.
У меня есть проект golang, и я пытаюсь использовать ведение журнала, как объяснено в их блоге на https://www.loggly.com/blog/logging-to-loggly-from-go-with-logrus-and-logrusly/
Проблема в том, что с их примером все в порядке, но у меня есть куча файлов и десятки функций (которые обрабатывают вызовы API), и я не хочу повторять инициализацию экземпляра регистратора каждый раз.
Это прекрасно работает в main.go
log := logrus.New()
hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword)
log.Hooks.Add(hook)
log.Info("Welcome")
hook.Flush()
и я могу видеть это сообщение в моей учетной записи.
Но если я сделаю что-то вроде этого -
func LogrusLogger(loglevel string, message interface{}){
log := logrus.New()
hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword)
log.Hooks.Add(hook)
log.Info(loglevel, message)
hook.Flush()
}
затем при вызове этой функции журналы можно увидеть в программной консоли, но не в указанной учетной записи loggly. Я правильно называю hook.Flush()? (Потому что я предполагаю, что именно в этот момент логи отправляются на сервер логов)
Дополнительная информация: первый кусок кода находится в main.go
внутри main()
функция
Второй кусок кода находится в utility.go
который имеет утилиту пакета, и я вызываю функцию как utility.LogrusLogger(loglevel, message)
куда бы я ни захотел после импорта утилиты пакета в этот файл. Я уверен, что все в порядке, так как я могу видеть журналы в консоли программы.
1 ответ
Я смог решить эту проблему, объявив следующее глобально
log := logrus.New()
hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword)
а затем с помощью таких функций, как это -
func LogrusInfo(args ...interface{}) {
logger.Hooks.Add(hook)
logger.Info(args...)
hook.Flush()
}
Ссылка: /questions/32845753/golang-logrus-kak-sdelat-tsentralizovannuyu-nastrojku/32845769#32845769