Skip to content
Snippets Groups Projects
Commit a7e62d84 authored by Alena Petraki's avatar Alena Petraki :nail_care_tone1:
Browse files

Добавлен шаблон для генерации LogInfoMiddleware. Доработан шаблон для...

Добавлен шаблон для генерации LogInfoMiddleware. Доработан шаблон для генерации функции WithLog так, чтобы добавлять LogInfoMiddleware в сервис Items
parent c771f3ff
No related branches found
No related tags found
No related merge requests found
import (
"fmt"
"time"
"context"
"git.perx.ru/perxis/perxis-go/pkg/items"
logzap "git.perx.ru/perxis/perxis-go/pkg/log/zap"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
{{ $funcName := (or .Vars.FuncName ("LogMiddleware")) }}
{{ $decorator := (or .Vars.DecoratorName ("logMiddleware")) }}
{{ $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" }}
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("{{ $serviceName }}")),
}
}
}
{{ range $method := .Interface.Methods }}
func (m *{{ $decorator }}) {{ $method.Declaration }} {
{{- if has $method.Name $writeMethods }}
{{ $method.ResultsNames }} = m.next.{{ $method.Call }}
{{ $inputObject := "" }}
{{ $outputObject := "" }}
{{ if gt (len $method.Results) 1 }}
{{ $outputObject = (first $method.Results).Name }}
{{ end }}
{{ if $method.AcceptsContext }}
{{ $inputObject = (first (rest $method.Params)).Name }}
{{ else if not $method.ReturnsError }}
{{ $inputObject = (first $method.Params).Name }}
{{ end }}
fields := []zapcore.Field{
logzap.Event({{ $packageName }}.Event{{ $method.Name }}{{ $objectName }}),
logzap.CallerFromContext(ctx),
{{/* {{ if eq $outputObject "" }} logzap.Object({{ $inputObject }}), {{- end }}*/}}
}
{{ if $method.ReturnsError }}
if err != nil {
{{- if not (eq $inputObject "") }}
fields = append(fields, logzap.Object({{ $inputObject }}))
{{- end }}
m.logger.Error(fmt.Sprintf("Failed to {{ (lower $method.Name) }}. Error: %s", err), fields...)
} else {
{{- if not (eq $outputObject "") }}
fields = append(fields, logzap.Object({{ $inputObject }}))
{{- else if not (eq $inputObject "") }}
fields = append(fields, logzap.Object({{ $inputObject }}))
{{- end }}
m.logger.Info("Successfully {{ (lower (trimSuffix "e" $method.Name)) }}ed", fields...)
}
{{ end }}
m.logger.Info("{{ $method.Name }}", fields...)
return {{ $method.ResultsNames }}
{{- else }}
return m.next.{{ $method.Call }}
{{- end }}
}
{{ end }}
...@@ -2,15 +2,23 @@ import ( ...@@ -2,15 +2,23 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
type Middleware func({{.Interface.Type}}) {{.Interface.Type}} {{ $serviceName := (split "." .Interface.Type)._1 }}
type Middleware func({{.Interface.Type}}) {{.Interface.Type}}
func WithLog(s {{.Interface.Type}}, logger *zap.Logger, log_access bool) {{.Interface.Type}} { func WithLog(s {{.Interface.Type}}, logger, svcLogger *zap.Logger, log_access bool) {{.Interface.Type}} {
if logger == nil { if logger == nil {
logger = zap.NewNop() logger = zap.NewNop()
} }
logger = logger.Named("{{ .Interface.Name }}") logger = logger.Named("{{ .Interface.Name }}")
{{ if (eq $serviceName "Items") }}
if svcLogger == nil {
svcLogger = zap.NewNop()
}
s = LogInfoMiddleware(svcLogger)(s)
{{ end }}
s = ErrorLoggingMiddleware(logger)(s) s = ErrorLoggingMiddleware(logger)(s)
if log_access { if log_access {
s = LoggingMiddleware(logger)(s) s = LoggingMiddleware(logger)(s)
......
...@@ -10,21 +10,21 @@ import ( ...@@ -10,21 +10,21 @@ import (
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
) )
type logServiceMiddleware struct { type logInfoMiddleware struct {
items.Items items.Items
logger *zap.Logger logger *zap.Logger
} }
func LogServiceMiddleware(logger *zap.Logger) Middleware { func LogInfoMiddleware(logger *zap.Logger) Middleware {
return func(next items.Items) items.Items { return func(next items.Items) items.Items {
return &logServiceMiddleware{ return &logInfoMiddleware{
Items: next, Items: next,
logger: logger.With(logzap.Component("Items")), logger: logger.With(logzap.Component("Items")),
} }
} }
} }
func (m *logServiceMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) { func (m *logInfoMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) {
err = m.Items.Archive(ctx, item, options...) err = m.Items.Archive(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -41,7 +41,7 @@ func (m *logServiceMiddleware) Archive(ctx context.Context, item *items.Item, op ...@@ -41,7 +41,7 @@ func (m *logServiceMiddleware) Archive(ctx context.Context, item *items.Item, op
return err return err
} }
func (m *logServiceMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) { func (m *logInfoMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) {
created, err = m.Items.Create(ctx, item, opts...) created, err = m.Items.Create(ctx, item, opts...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -58,7 +58,7 @@ func (m *logServiceMiddleware) Create(ctx context.Context, item *items.Item, opt ...@@ -58,7 +58,7 @@ func (m *logServiceMiddleware) Create(ctx context.Context, item *items.Item, opt
return created, err return created, err
} }
func (m *logServiceMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) { func (m *logInfoMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
err = m.Items.Delete(ctx, item, options...) err = m.Items.Delete(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -75,7 +75,7 @@ func (m *logServiceMiddleware) Delete(ctx context.Context, item *items.Item, opt ...@@ -75,7 +75,7 @@ func (m *logServiceMiddleware) Delete(ctx context.Context, item *items.Item, opt
return err return err
} }
func (m *logServiceMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) { func (m *logInfoMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) {
err = m.Items.Publish(ctx, item, options...) err = m.Items.Publish(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -92,7 +92,7 @@ func (m *logServiceMiddleware) Publish(ctx context.Context, item *items.Item, op ...@@ -92,7 +92,7 @@ func (m *logServiceMiddleware) Publish(ctx context.Context, item *items.Item, op
return err return err
} }
func (m *logServiceMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) { func (m *logInfoMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) {
err = m.Items.Unarchive(ctx, item, options...) err = m.Items.Unarchive(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -109,7 +109,7 @@ func (m *logServiceMiddleware) Unarchive(ctx context.Context, item *items.Item, ...@@ -109,7 +109,7 @@ func (m *logServiceMiddleware) Unarchive(ctx context.Context, item *items.Item,
return err return err
} }
func (m *logServiceMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) { func (m *logInfoMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
err = m.Items.Undelete(ctx, item, options...) err = m.Items.Undelete(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -126,7 +126,7 @@ func (m *logServiceMiddleware) Undelete(ctx context.Context, item *items.Item, o ...@@ -126,7 +126,7 @@ func (m *logServiceMiddleware) Undelete(ctx context.Context, item *items.Item, o
return err return err
} }
func (m *logServiceMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) { func (m *logInfoMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
err = m.Items.Unpublish(ctx, item, options...) err = m.Items.Unpublish(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
...@@ -143,7 +143,7 @@ func (m *logServiceMiddleware) Unpublish(ctx context.Context, item *items.Item, ...@@ -143,7 +143,7 @@ func (m *logServiceMiddleware) Unpublish(ctx context.Context, item *items.Item,
return err return err
} }
func (m *logServiceMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) { func (m *logInfoMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) {
err = m.Items.Update(ctx, item, options...) err = m.Items.Update(ctx, item, options...)
fields := []zapcore.Field{ fields := []zapcore.Field{
......
// Code generated by gowrap. DO NOT EDIT. // Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/middleware // template: ../../../assets/templates/middleware/middleware.tmpl
// gowrap: http://github.com/hexdigest/gowrap // gowrap: http://github.com/hexdigest/gowrap
package middleware package middleware
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/middleware -o middleware.go -l "" //go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/middleware.tmpl -o middleware.go -l ""
import ( import (
"git.perx.ru/perxis/perxis-go/pkg/items" "git.perx.ru/perxis/perxis-go/pkg/items"
...@@ -13,12 +13,17 @@ import ( ...@@ -13,12 +13,17 @@ import (
type Middleware func(items.Items) items.Items type Middleware func(items.Items) items.Items
func WithLog(s items.Items, logger *zap.Logger, log_access bool) items.Items { func WithLog(s items.Items, logger, svcLogger *zap.Logger, log_access bool) items.Items {
if logger == nil { if logger == nil {
logger = zap.NewNop() logger = zap.NewNop()
} }
logger = logger.Named("Items") logger = logger.Named("Items")
if svcLogger == nil {
svcLogger = zap.NewNop()
}
s = LogInfoMiddleware(svcLogger)(s)
s = ErrorLoggingMiddleware(logger)(s) s = ErrorLoggingMiddleware(logger)(s)
if log_access { if log_access {
s = LoggingMiddleware(logger)(s) s = LoggingMiddleware(logger)(s)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment