Select Git revision
log.tmpl 2.49 KiB
{{/*
Этот шаблон предназначен только для первичной генерации LoggingMiddleware,
поскольку он не может учесть все сигнатуры логгируемых методов. После генерации
необходимо внести правки в код в местах, помеченных 'TODO'
Сгенерировать middleware:
```shell
gowrap gen -p git.perx.ru/perxis/perxis-go/<package_name> -i <interface> -t ../../../assets/templates/middleware/logging.tmpl -o info_logging_middleware.go -g
```
*/}}
import (
"fmt"
"time"
"context"
logzap "git.perx.ru/perxis/perxis-go/zap"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
{{ $funcName := (or .Vars.FuncName ("LoggingMiddleware")) }}
{{ $decorator := (or .Vars.DecoratorName ("loggingMiddleware")) }}
{{ $packageName := (split "." .Interface.Type)._0 }}
{{ $serviceName := (split "." .Interface.Type)._1 }}
{{ $objectName := (trimSuffix "s" (split "." .Interface.Type)._1) }}
{{ $writeMethods := list "Archive" "Create" "Delete" "Publish" "Unarchive" "Undelete" "Unpublish" "Update" "SetSchema" "Migrate" }}
type {{ $decorator }} struct {
logger *zap.Logger
next {{ .Interface.Type }}
}
func {{ $funcName }} (logger *zap.Logger) Middleware {
return func(next {{ .Interface.Type }}) {{ .Interface.Type }} {
return &{{ $decorator }}{
next: next,
logger: logger.With(logzap.Component("{{ (lower $serviceName ) }}")),
}
}
}
{{ range $method := .Interface.Methods }}
func (m *{{ $decorator }}) {{ $method.Declaration }} {
logger := m.logger.With(
{{- if $method.AcceptsContext }}
logzap.CallerFromContext(ctx),
{{ end -}}
{{- if has $method.Name $writeMethods -}}
logzap.Event({{ $packageName }}.Event{{ $objectName }}{{ $method.Name }}),
logzap.Object(TODO),
{{ end -}}
)
{{ $method.ResultsNames }} = m.next.{{ $method.Call }}
{{- if $method.ReturnsError }}
if err != nil {
logger.Error("Failed to {{ (lower $method.Name) }}", zap.Error(err)
{{- if has $method.Name $writeMethods -}}
, logzap.Channels(logzap.Userlog, logzap.Syslog)
{{- end -}})
return
}
{{ end }}
{{ if has $method.Name $writeMethods }}
logger.Info("Successfully {{ (lower (trimSuffix "e" $method.Name)) }}ed", logzap.Channels(logzap.Userlog))
{{ end -}}
return {{ $method.ResultsNames }}
}
{{ end }}