Skip to content

Пакет для удобного способа логирования согласно спецификации GELF, используя в своей основе пакет uber/zap

License

SedovSG/zaplog

Repository files navigation

Пакет предназначен для формирования логов в соответсвии со стандартом GELF

Build Status GitHub go.mod Go version GitHub GoDoc reference example Go Report Card

GELF - сокращение от Graylog Extended Log Format - специального формата логов, разработанного для Graylog. Согласно стандарту GELF, в каждом лог-сообщении существует следующий набор полей:

  • версия;
  • хост (откуда пришло сообщение);
  • время (timestamp);
  • сокращенный и полный вариант сообщения;
  • другие поля, настроенные самостоятельно.

Пример минимально возможного json-объекта лога:

{
  "host": "127.0.0.1",
  "timestamp": "2010-10-10 11:55:36 -0700",
  "method": "GET",
  "url": "/apache_pb.gif",
  "protocol": "HTTP/1.0",
  "code": 200,
  "level": "ERROR",
  "message": "Text error",
  "tag": "my-tag",
  "type": "gelf"
}

Схема работы:

  • Выставление лога
  • Отрпавка его на порт udp:12201
  • Обработка лога Logstash или Graylog
  • И дальнейшая запись в Elasticsearch (в случае ELK)

Структура

Влючение поддержки GELF драйвера

В docker-compose.yml добавить:

---
version: '3.7'

services:
  service:
    ...
    logging:
      driver: gelf
      options:
        gelf-address: "udp://195.201.108.163:12201"
        tag: "service-name"
    ...

Название тега нужно выбирать, по возможности, уникальным, т.к. из него гененируются индексы в Elasticsearch.

Установка

$: go get -u github.com/SedovSG/zaplog

Использование

zaplog.Throw().Info("Text message")
zaplog.Throw("field").Debug("Text message")
zaplog.Throw("GET", "/api/v1/index", 301).Warn("Text message")
zaplog.Throw("HEAD", "/api/v1/guides?", 500, map[string]interface{}{"data": DataModel}).Error("Text message")
zaplog.Throw(Request, Response, map[string]interface{}{"other": DataModel}).Fatal("Text message")

Вывод:

{
  "level":"INFO",
  "caller":"main/index.go:21",
  "function": "main.index",
  "message":"Text message",
  "method":"HEAD",
  "url":"/api/v1/guides?",
  "code":500,
  "stacktrace": "",
  "extend":[{
      "data": {
        "name": "Alex",
        "money": 1250
      }
  }]
}

Полезные ссылки

About

Пакет для удобного способа логирования согласно спецификации GELF, используя в своей основе пакет uber/zap

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published