zaplog

package module
v0.0.0-...-db0f42a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 18, 2020 License: BSD-3-Clause Imports: 3 Imported by: 0

README

Пакет предназначен для формирования логов в соответсвии со стандартом 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
      }
  }]
}

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

Documentation

Overview

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

Example
Throw().Info("Text message")

Throw("field").Debug("Text message")

Throw("GET", "/api/v1/index", 301).Warn("Text message")

Throw("HEAD", "/api/v1/guides?", 500, map[string]interface{}{"data": DataModel{"Alex", 28}}).Error("Text message")

Throw(models.Request{}, models.Response{}, map[string]interface{}{"other": DataModel{"Ann", 17}}).Fatal("Text message")
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Throw

func Throw(fields ...interface{}) *zap.Logger

Throw добавляет новые поля в лог Для добавления данных контекста, отличных от Request и Response, необходимо передавать данные в виде map[string]interface{}, которые добавляются в поле "extend". После чего можно непосредственно вызвать метод пакета zap.Logger, для формирования лога.

Пример использования: Throw("HEAD", "/api/v1/guides?", 500, map[string]interface{}{"data": DataModel{"Alex", 28}}).Info("Text message")

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL