Как реализовать регистрацию уровня на уровне 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, не получая все остальное.