Skip to content
Snippets Groups Projects
Select Git revision
  • e59e0fcbd5cbc745470cc0c51deb948bf2573ad3
  • master default protected
  • feature/3149-LocaleCodeAsID-Implementation
  • feature/PRXS-3383-CollectionsRankSortAPI
  • fix/PRXS-3401-ValidateValidationOpts
  • feature/3149-LocaleCodeAsID-Feature
  • feature/PRXS-3383-CollectionsSort
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • feature/PRXS-3218-HideTemplateActions
  • feature/PRXS-3234-PruneIdents
  • feature/3146-UpdateItemStorageInterface
  • feature/3274-ObjectIndexesFixes
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

log.tmpl

Blame
  • 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 }}