go-logger – простой и информативный логгер для Go

Не смотря на всё многообразие существующих логгеров для Go, как-то не удалось подобрать удобный и подходящий для меня. Хотелось иметь инструмент, похожий на те, какими пользовался в других языках. Если хочешь сделать что-то хорошо, сделай это сам.

Update 3 августа 2016 года.

Здесь имеется ввиду логирование какой-то информации в консоль, либо файл. Случай со структурированными логами рассматривается в конце статьи.

Итак, мой go-logger. Что он умеет и чем он лучше других:

  • Все методы логгирования принимают любое количество аргументов любых типов;
  • Метод Debug() красиво выводит данные. Если это структура, слайс или мапа, то будет наглядно видно что в них, если же это простая переменная, то увидим тип и размер;
  • Отображается файл и строка в которой вызвано логгирование;
  • Цветовое кодирование каждого уровня;
  • Возможность изменить формат вывода даты.

Пример

    package main

    import "github.com/ivahaev/go-logger"

    func main() {
        logger.SetLevel("DEBUG")

        logger.Debug("Some string for debug", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
        logger.Info("Some string for info", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
        logger.Notice("Some string for debug", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
        logger.Warn("Some string for warning", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
        logger.Error("Some string for error", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
        logger.Crit("Some string for critical", 123, map[string]interface{}{"prop1": "val1", "prop2": 321})
    }

Вот что получим в консоли: logger console output

Со временем добавлю возможность прятать файл вызова и строку, такие мысли уже посещали для продакшена. Может быть, что-то ещё, но пока этот логгер меня устраивает на 100%, я его использую во всех своих проектах. Возможно, пригодится и вам!

P.S. 3 августа 2016 года

В данный момент полностью перешёл на logrus, т.к. стал использовать аггрегирование логов в Graylog2, и он здесь удобнее, я оценил всю прелесть структурированных логов. Свой же логгер использую для дебага в процессе разработки, в основном, метод Debug().

P.P.S. 25 апреля 2018 года

Любовь к logrus прошла, чему сильно способствовало переименование аккаутна разработчика на Гитхабе с Sirupsen на sirupsen, что сломало сборку нескольких моих проектов. Давно руки чесались попробовать zap, и создатель Логруса сам того не ведая, меня стимулировал к переходу. Работает шустро, возможностей достаточно для моих задач, теперь дружу с ним :).