Как реализовать регистрацию уровня на уровне golang?
Есть ли хорошая обертка, доступная для регистрации на уровне в голанге? Если нет, как я должен сам реализовать его?
То, что я хочу, довольно просто. Я хочу несколько функций, например
log.Error()
log.Info()
и т.д., которые выводят свои выходы в стандартный вывод, а также сохраняют их в файле журнала (в зависимости от уровня, заданного программой как аргумент командной строки). Как реализовать эту оболочку?
Ответы
Ответ 1
Теперь еще несколько предложений, поскольку существующие ответы довольно стары:
Ответ 2
- Uber-go/Zap: быстрая, структурированная, выровненная регистрация в Go
- Logrus: структурированное, подключаемое ведение журнала для Go. (JSON и форматирование текста)
Обе библиотеки также имеют хуков уровня, что является очень интересной особенностью. Хуки могут быть зарегистрированы для определенных уровней журнала. Так, например, возникает любая ошибка (записанная с помощью log.Error()
), о которой вы можете сообщить в какой-либо инструмент мониторинга и т.д.
Ответ 3
Взгляните на http://cgl.tideland.biz и там на упаковке "applog". Это работает так.
PS: Вся CGL в настоящее время переработана и скоро будет выпущена с новыми функциями, но под другим именем. ;)
Ответ 4
Я думаю, что seelog соответствует вашим требованиям, и, похоже, он очень популярен, поскольку он часто появляется в журнальных дискуссиях. Я никогда не использовал его всерьез, поэтому я не могу комментировать это.
Ответ 5
stdlog соответствует вашим требованиям:
log := stdlog.GetFromFlags()
log.Info("Connecting to the server...")
log.Errorf("Connection failed: %q", err)
Ответ 6
https://github.com/hashicorp/logutils Я нашел это очень простым в использовании, и вам даже не нужно менять вызовы метода log.Printf
библиотеки std.
Ответ 7
Я работаю с rlog в данный момент и люблю их подход. Код выглядит хорошо, упрощенно и достаточно документирован.
Что меня убедило:
- нет внешних зависимостей
- я могу использовать
rlog.Info()
где угодно, не обойти ссылки - хорошее использование переменных среды
- произвольное количество уровней трассировки, например
rlog.Trace(4, "foo")
Ответ 8
Я добавил поддержку уровня ведения журнала во встроенный пакет журнала Go. Здесь вы можете найти мой код:
https://github.com/gologme/log
Помимо добавления поддержки Info, Warn и Debug, пользователи также могут определять свои собственные уровни регистрации. Уровни ведения журнала включены и отключены по отдельности. Это означает, что вы можете включить журналы Debug, не получая все остальное.