This commit is contained in:
Mike Schwörer 2023-07-24 11:38:57 +02:00
parent eefb9ac9f5
commit f5151eb214
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
3 changed files with 30 additions and 30 deletions

View File

@ -6,12 +6,12 @@ import (
) )
type ErrorPackageConfig struct { type ErrorPackageConfig struct {
ZeroLogErrTraces bool // autom print zerolog logs on .Build() (for SevErr and SevFatal) ZeroLogErrTraces bool // autom print zerolog logs on .Build() (for SevErr and SevFatal)
ZeroLogAllTraces bool // autom print zerolog logs on .Build() (for all Severities) ZeroLogAllTraces bool // autom print zerolog logs on .Build() (for all Severities)
RecursiveErrors bool // errors contains their Origin-Error RecursiveErrors bool // errors contains their Origin-Error
ExtendedGinOutput bool // Log extended data (trace, meta, ...) to gin in err.Output() ExtendedGinOutput bool // Log extended data (trace, meta, ...) to gin in err.Output()
ExtendGinOutput func(json map[string]any) // (Optionally) extend the gin output with more fields ExtendGinOutput func(err *ExErr, json map[string]any) // (Optionally) extend the gin output with more fields
ExtendGinDataOutput func(json map[string]any) // (Optionally) extend the gin `__data` output with more fields ExtendGinDataOutput func(err *ExErr, depth int, json map[string]any) // (Optionally) extend the gin `__data` output with more fields
} }
type ErrorPackageConfigInit struct { type ErrorPackageConfigInit struct {
@ -19,8 +19,8 @@ type ErrorPackageConfigInit struct {
ZeroLogAllTraces bool ZeroLogAllTraces bool
RecursiveErrors bool RecursiveErrors bool
ExtendedGinOutput bool ExtendedGinOutput bool
ExtendGinOutput *func(json map[string]any) ExtendGinOutput *func(err *ExErr, json map[string]any)
ExtendGinDataOutput *func(json map[string]any) ExtendGinDataOutput *func(err *ExErr, depth int, json map[string]any)
} }
var initialized = false var initialized = false
@ -30,8 +30,8 @@ var pkgconfig = ErrorPackageConfig{
ZeroLogAllTraces: false, ZeroLogAllTraces: false,
RecursiveErrors: true, RecursiveErrors: true,
ExtendedGinOutput: false, ExtendedGinOutput: false,
ExtendGinOutput: func(json map[string]any) {}, ExtendGinOutput: func(err *ExErr, json map[string]any) {},
ExtendGinDataOutput: func(json map[string]any) {}, ExtendGinDataOutput: func(err *ExErr, depth int, json map[string]any) {},
} }
// Init initializes the exerr packages // Init initializes the exerr packages
@ -47,8 +47,8 @@ func Init(cfg ErrorPackageConfigInit) {
ZeroLogAllTraces: cfg.ZeroLogAllTraces, ZeroLogAllTraces: cfg.ZeroLogAllTraces,
RecursiveErrors: cfg.RecursiveErrors, RecursiveErrors: cfg.RecursiveErrors,
ExtendedGinOutput: cfg.ExtendedGinOutput, ExtendedGinOutput: cfg.ExtendedGinOutput,
ExtendGinOutput: langext.Coalesce(cfg.ExtendGinOutput, func(json map[string]any) {}), ExtendGinOutput: langext.Coalesce(cfg.ExtendGinOutput, func(err *ExErr, json map[string]any) {}),
ExtendGinDataOutput: langext.Coalesce(cfg.ExtendGinDataOutput, func(json map[string]any) {}), ExtendGinDataOutput: langext.Coalesce(cfg.ExtendGinDataOutput, func(err *ExErr, depth int, json map[string]any) {}),
} }
initialized = true initialized = true

View File

@ -7,43 +7,43 @@ import (
"time" "time"
) )
func (ee *ExErr) toJson() gin.H { func (ee *ExErr) toJson(depth int) gin.H {
json := gin.H{} ginJson := gin.H{}
if ee.UniqueID != "" { if ee.UniqueID != "" {
json["id"] = ee.UniqueID ginJson["id"] = ee.UniqueID
} }
if ee.Category != CatWrap { if ee.Category != CatWrap {
json["category"] = ee.Category ginJson["category"] = ee.Category
} }
if ee.Type != TypeWrap { if ee.Type != TypeWrap {
json["type"] = ee.Type ginJson["type"] = ee.Type
} }
if ee.StatusCode != nil { if ee.StatusCode != nil {
json["statuscode"] = ee.StatusCode ginJson["statuscode"] = ee.StatusCode
} }
if ee.Message != "" { if ee.Message != "" {
json["message"] = ee.Message ginJson["message"] = ee.Message
} }
if ee.Caller != "" { if ee.Caller != "" {
json["caller"] = ee.Caller ginJson["caller"] = ee.Caller
} }
if ee.Severity != SevErr { if ee.Severity != SevErr {
json["severity"] = ee.Severity ginJson["severity"] = ee.Severity
} }
if ee.Timestamp != (time.Time{}) { if ee.Timestamp != (time.Time{}) {
json["time"] = ee.Timestamp.Format(time.RFC3339) ginJson["time"] = ee.Timestamp.Format(time.RFC3339)
} }
if ee.WrappedErrType != "" { if ee.WrappedErrType != "" {
json["wrappedErrType"] = ee.WrappedErrType ginJson["wrappedErrType"] = ee.WrappedErrType
} }
if ee.OriginalError != nil { if ee.OriginalError != nil {
json["original"] = ee.OriginalError.toJson() ginJson["original"] = ee.OriginalError.toJson(depth + 1)
} }
pkgconfig.ExtendGinDataOutput(json) pkgconfig.ExtendGinDataOutput(ee, depth, ginJson)
return json return ginJson
} }
func (ee *ExErr) Output(g *gin.Context) { func (ee *ExErr) Output(g *gin.Context) {
@ -75,10 +75,10 @@ func (ee *ExErr) Output(g *gin.Context) {
} }
if pkgconfig.ExtendedGinOutput { if pkgconfig.ExtendedGinOutput {
ginOutput["__data"] = ee.toJson() ginOutput["__data"] = ee.toJson(0)
} }
pkgconfig.ExtendGinOutput(ginOutput) pkgconfig.ExtendGinOutput(ee, ginOutput)
g.Render(statuscode, json.GoJsonRender{Data: ginOutput, NilSafeSlices: true, NilSafeMaps: true}) g.Render(statuscode, json.GoJsonRender{Data: ginOutput, NilSafeSlices: true, NilSafeMaps: true})
} }

View File

@ -1,5 +1,5 @@
package goext package goext
const GoextVersion = "0.0.192" const GoextVersion = "0.0.193"
const GoextVersionTimestamp = "2023-07-24T11:30:07+0200" const GoextVersionTimestamp = "2023-07-24T11:38:57+0200"