Метрики и логирование
#
ЛогированиеДля того чтобы включить генерацию 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), ), )}