Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
a73d7d1654
|
|||
bbd7a7bc2c
|
|||
f5151eb214
|
@@ -6,12 +6,12 @@ import (
|
||||
)
|
||||
|
||||
type ErrorPackageConfig struct {
|
||||
ZeroLogErrTraces bool // autom print zerolog logs on .Build() (for SevErr and SevFatal)
|
||||
ZeroLogAllTraces bool // autom print zerolog logs on .Build() (for all Severities)
|
||||
RecursiveErrors bool // errors contains their Origin-Error
|
||||
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
|
||||
ExtendGinDataOutput func(json map[string]any) // (Optionally) extend the gin `__data` output with more fields
|
||||
ZeroLogErrTraces bool // autom print zerolog logs on .Build() (for SevErr and SevFatal)
|
||||
ZeroLogAllTraces bool // autom print zerolog logs on .Build() (for all Severities)
|
||||
RecursiveErrors bool // errors contains their Origin-Error
|
||||
ExtendedGinOutput bool // Log extended data (trace, meta, ...) to gin in err.Output()
|
||||
ExtendGinOutput func(err *ExErr, json map[string]any) // (Optionally) extend the gin 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 {
|
||||
@@ -19,8 +19,8 @@ type ErrorPackageConfigInit struct {
|
||||
ZeroLogAllTraces bool
|
||||
RecursiveErrors bool
|
||||
ExtendedGinOutput bool
|
||||
ExtendGinOutput *func(json map[string]any)
|
||||
ExtendGinDataOutput *func(json map[string]any)
|
||||
ExtendGinOutput func(err *ExErr, json map[string]any)
|
||||
ExtendGinDataOutput func(err *ExErr, depth int, json map[string]any)
|
||||
}
|
||||
|
||||
var initialized = false
|
||||
@@ -30,8 +30,8 @@ var pkgconfig = ErrorPackageConfig{
|
||||
ZeroLogAllTraces: false,
|
||||
RecursiveErrors: true,
|
||||
ExtendedGinOutput: false,
|
||||
ExtendGinOutput: func(json map[string]any) {},
|
||||
ExtendGinDataOutput: func(json map[string]any) {},
|
||||
ExtendGinOutput: func(err *ExErr, json map[string]any) {},
|
||||
ExtendGinDataOutput: func(err *ExErr, depth int, json map[string]any) {},
|
||||
}
|
||||
|
||||
// Init initializes the exerr packages
|
||||
@@ -42,13 +42,23 @@ func Init(cfg ErrorPackageConfigInit) {
|
||||
panic("Cannot re-init error package")
|
||||
}
|
||||
|
||||
ego := func(err *ExErr, json map[string]any) {}
|
||||
egdo := func(err *ExErr, depth int, json map[string]any) {}
|
||||
|
||||
if cfg.ExtendGinOutput != nil {
|
||||
ego = cfg.ExtendGinOutput
|
||||
}
|
||||
if cfg.ExtendGinDataOutput != nil {
|
||||
egdo = cfg.ExtendGinDataOutput
|
||||
}
|
||||
|
||||
pkgconfig = ErrorPackageConfig{
|
||||
ZeroLogErrTraces: cfg.ZeroLogErrTraces,
|
||||
ZeroLogAllTraces: cfg.ZeroLogAllTraces,
|
||||
RecursiveErrors: cfg.RecursiveErrors,
|
||||
ExtendedGinOutput: cfg.ExtendedGinOutput,
|
||||
ExtendGinOutput: langext.Coalesce(cfg.ExtendGinOutput, func(json map[string]any) {}),
|
||||
ExtendGinDataOutput: langext.Coalesce(cfg.ExtendGinDataOutput, func(json map[string]any) {}),
|
||||
ExtendGinOutput: ego,
|
||||
ExtendGinDataOutput: egdo,
|
||||
}
|
||||
|
||||
initialized = true
|
||||
|
@@ -162,7 +162,6 @@ func (ee *ExErr) RecursiveStatuscode() *int {
|
||||
}
|
||||
}
|
||||
|
||||
// fallback to <empty>
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -179,6 +178,18 @@ func (ee *ExErr) RecursiveCategory() ErrorCategory {
|
||||
return ee.Category
|
||||
}
|
||||
|
||||
// RecursiveMeta searches (top-down) for teh first error that has a meta value with teh specified key
|
||||
// and returns its value (or nil)
|
||||
func (ee *ExErr) RecursiveMeta(key string) *MetaValue {
|
||||
for curr := ee; curr != nil; curr = curr.OriginalError {
|
||||
if metaval, ok := curr.Meta[key]; ok {
|
||||
return langext.Ptr(metaval)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ee *ExErr) Depth() int {
|
||||
if ee.OriginalError == nil {
|
||||
return 1
|
||||
|
32
exerr/gin.go
32
exerr/gin.go
@@ -7,43 +7,43 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func (ee *ExErr) toJson() gin.H {
|
||||
json := gin.H{}
|
||||
func (ee *ExErr) toJson(depth int) gin.H {
|
||||
ginJson := gin.H{}
|
||||
|
||||
if ee.UniqueID != "" {
|
||||
json["id"] = ee.UniqueID
|
||||
ginJson["id"] = ee.UniqueID
|
||||
}
|
||||
if ee.Category != CatWrap {
|
||||
json["category"] = ee.Category
|
||||
ginJson["category"] = ee.Category
|
||||
}
|
||||
if ee.Type != TypeWrap {
|
||||
json["type"] = ee.Type
|
||||
ginJson["type"] = ee.Type
|
||||
}
|
||||
if ee.StatusCode != nil {
|
||||
json["statuscode"] = ee.StatusCode
|
||||
ginJson["statuscode"] = ee.StatusCode
|
||||
}
|
||||
if ee.Message != "" {
|
||||
json["message"] = ee.Message
|
||||
ginJson["message"] = ee.Message
|
||||
}
|
||||
if ee.Caller != "" {
|
||||
json["caller"] = ee.Caller
|
||||
ginJson["caller"] = ee.Caller
|
||||
}
|
||||
if ee.Severity != SevErr {
|
||||
json["severity"] = ee.Severity
|
||||
ginJson["severity"] = ee.Severity
|
||||
}
|
||||
if ee.Timestamp != (time.Time{}) {
|
||||
json["time"] = ee.Timestamp.Format(time.RFC3339)
|
||||
ginJson["time"] = ee.Timestamp.Format(time.RFC3339)
|
||||
}
|
||||
if ee.WrappedErrType != "" {
|
||||
json["wrappedErrType"] = ee.WrappedErrType
|
||||
ginJson["wrappedErrType"] = ee.WrappedErrType
|
||||
}
|
||||
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) {
|
||||
@@ -75,10 +75,10 @@ func (ee *ExErr) Output(g *gin.Context) {
|
||||
}
|
||||
|
||||
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})
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.192"
|
||||
const GoextVersion = "0.0.195"
|
||||
|
||||
const GoextVersionTimestamp = "2023-07-24T11:30:07+0200"
|
||||
const GoextVersionTimestamp = "2023-07-24T11:42:52+0200"
|
||||
|
Reference in New Issue
Block a user