Перейти к основному содержимому
Version: 3.0.0

Метрики и логирование

Логирование#

Для того чтобы включить генерацию middleware логирования, необходимо использовать функцию Logging.

Пример включающий логирование для всех методов:

// +build swipe
package example
import (  "github.com/example/app/pkg/controller"  "github.com/example/app/pkg/swipe/gokit")
func swipe() {    gokit.Gokit(        gokit.Interface((*controller.ExampleController)(nil), "example"),                gokit.HTTPServer(),                gokit.MethodDefaultOptions(                     gokit.Logging(true),        ),    )}

Отключение логирование для определенного метода#

// +build swipe
package example
import (  "github.com/example/app/pkg/controller"  "github.com/example/app/pkg/swipe/gokit")
func swipe() {    gokit.Gokit(        gokit.Interface((*controller.ExampleController)(nil), "example"),                gokit.HTTPServer(),                gokit.MethodOptions(controller.ExampleController.Get,                       gokit.Logging(false),        ),                          )}

Отключение логирование для определенный параметров метода#

LoggingParams используется для исключения или включения параметра метода в логирование.

Параметры:

  • includes включение параметра в логирование.
  • excludes исключение параметра из логирования.
// +build swipe
package example
import (  "github.com/example/app/pkg/controller"  "github.com/example/app/pkg/swipe/gokit")
func swipe() {    gokit.Gokit(        gokit.Interface((*controller.ExampleController)(nil), "example"),                gokit.HTTPServer(),                gokit.MethodOptions(controller.ExampleController.Get,                       gokit.LoggingParams([]string{}, []string{"password"}), // выключает логирование параметра password        ),    )}

Добавление в логирование параметра из контекста#

package log
import (    "context"    "net/http")
type ContextKey string
const (    RequestIDLogContextKey ContextKey = "request_id")
func PopulateContext(ctx context.Context, r *http.Request) context.Context {    for k, v := range map[ContextKey]string{        RequestIDLogContextKey: r.Header.Get("X-Request-Id"),    } {        ctx = context.WithValue(ctx, k, v)    }    return ctx}
// +build swipe
package example
import (  "github.com/example/app/pkg/controller"  "github.com/example/app/pkg/swipe/gokit")
func swipe() {    gokit.Gokit(        gokit.Interface((*controller.ExampleController)(nil), "example"),                gokit.HTTPServer(),                gokit.MethodOptions(controller.ExampleController.Get,                       gokit.LoggingContext(log.RequestIDLogContextKey, "requestID"),        ),    )}

Логирование ошибки#

Вы можете логировать ошибку, а клиенту отправить другое сообщение. Для этого необходимо имплементировать интерфейс interface{ LogError() error } для типа error.

package example
type SomeError struct {    Err error    Message string}
func (e *SomeError) LogError() error {  return e.Err}
func (e *SomeError) Error() string {    return e.Message}
func (e *SomeError) StatusCode() int {    return 400}

Более подробно в разделе про Ошибки API

Метрики#

Генерация сбора метрик доступна только с использованием Prometheus

info

Генерируется сбор только количества успешных/не успешных запросов и время выполнения метода.

// +build swipe
package example
import (  "github.com/example/app/pkg/controller"  "github.com/example/app/pkg/swipe/gokit")
func swipe() {    gokit.Gokit(        Interface((*controller.ExampleController)(nil), "example"),                HTTPServer(),                MethodDefaultOptions(                       Instrumenting(true),        ),    )}