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 (
"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 {
logger = zap.NewNop()
}
logger = logger.Named("{{ .Interface.Name }}")
{{ if (eq $serviceName "Items") }}
if svcLogger == nil {
svcLogger = zap.NewNop()
}
s = LogInfoMiddleware(svcLogger)(s)
{{ end }}
s = ErrorLoggingMiddleware(logger)(s)
if log_access {
s = LoggingMiddleware(logger)(s)
......
......@@ -10,21 +10,21 @@ import (
"go.uber.org/zap/zapcore"
)
type logServiceMiddleware struct {
type logInfoMiddleware struct {
items.Items
logger *zap.Logger
}
func LogServiceMiddleware(logger *zap.Logger) Middleware {
func LogInfoMiddleware(logger *zap.Logger) Middleware {
return func(next items.Items) items.Items {
return &logServiceMiddleware{
return &logInfoMiddleware{
Items: next,
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...)
fields := []zapcore.Field{
......@@ -41,7 +41,7 @@ func (m *logServiceMiddleware) Archive(ctx context.Context, item *items.Item, op
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...)
fields := []zapcore.Field{
......@@ -58,7 +58,7 @@ func (m *logServiceMiddleware) Create(ctx context.Context, item *items.Item, opt
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...)
fields := []zapcore.Field{
......@@ -75,7 +75,7 @@ func (m *logServiceMiddleware) Delete(ctx context.Context, item *items.Item, opt
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...)
fields := []zapcore.Field{
......@@ -92,7 +92,7 @@ func (m *logServiceMiddleware) Publish(ctx context.Context, item *items.Item, op
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...)
fields := []zapcore.Field{
......@@ -109,7 +109,7 @@ func (m *logServiceMiddleware) Unarchive(ctx context.Context, item *items.Item,
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...)
fields := []zapcore.Field{
......@@ -126,7 +126,7 @@ func (m *logServiceMiddleware) Undelete(ctx context.Context, item *items.Item, o
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...)
fields := []zapcore.Field{
......@@ -143,7 +143,7 @@ func (m *logServiceMiddleware) Unpublish(ctx context.Context, item *items.Item,
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...)
fields := []zapcore.Field{
......
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/middleware
// template: ../../../assets/templates/middleware/middleware.tmpl
// gowrap: http://github.com/hexdigest/gowrap
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 (
"git.perx.ru/perxis/perxis-go/pkg/items"
......@@ -13,12 +13,17 @@ import (
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 {
logger = zap.NewNop()
}
logger = logger.Named("Items")
if svcLogger == nil {
svcLogger = zap.NewNop()
}
s = LogInfoMiddleware(svcLogger)(s)
s = ErrorLoggingMiddleware(logger)(s)
if log_access {
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