@@ -41,7 +41,8 @@ type JSONSelectEncoder struct {
41
41
zapcore.Encoder `json:"-"`
42
42
Selector string `json:"selector,omitempty"`
43
43
44
- keys [][]string
44
+ getters [][]string
45
+ setters [][]string
45
46
}
46
47
47
48
func (JSONSelectEncoder ) CaddyModule () caddy.ModuleInfo {
@@ -60,14 +61,34 @@ func (e *JSONSelectEncoder) Provision(ctx caddy.Context) error {
60
61
return fmt .Errorf ("selector is mandatory" )
61
62
}
62
63
63
- e .keys = [][]string {}
64
+ e .setters = [][]string {}
65
+ e .getters = [][]string {}
64
66
r := caddy .NewReplacer ()
65
- r .Map (func (key string ) (interface {}, bool ) {
66
- e .keys = append (e .keys , strings .Split (key , ">" ))
67
+ r .Map (func (sel string ) (interface {}, bool ) {
68
+ var set , get string
69
+
70
+ parts := strings .Split (sel , ":" )
71
+ if len (parts ) == 1 {
72
+ set = parts [0 ]
73
+ get = set
74
+ } else if len (parts ) == 2 {
75
+ set = parts [0 ]
76
+ get = parts [1 ]
77
+ } else {
78
+ // todo > error out - how?
79
+ return nil , false
80
+ }
81
+
82
+ e .setters = append (e .setters , strings .Split (set , ">" ))
83
+ e .getters = append (e .getters , strings .Split (get , ">" ))
67
84
return nil , false
68
85
})
69
86
r .ReplaceAll (e .Selector , "" )
70
87
88
+ if len (e .setters ) != len (e .getters ) {
89
+ return fmt .Errorf ("selector must have the same number of setters and getters" )
90
+ }
91
+
71
92
e .Encoder = zapcore .NewJSONEncoder (e .ZapcoreEncoderConfig ())
72
93
return nil
73
94
}
@@ -77,7 +98,8 @@ func (e JSONSelectEncoder) Clone() zapcore.Encoder {
77
98
LogEncoderConfig : e .LogEncoderConfig ,
78
99
Encoder : e .Encoder .Clone (),
79
100
Selector : e .Selector ,
80
- keys : e .keys ,
101
+ getters : e .getters ,
102
+ setters : e .setters ,
81
103
}
82
104
}
83
105
@@ -93,13 +115,15 @@ func (e JSONSelectEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Fie
93
115
func (idx int , val []byte , typ jsonparser.ValueType , err error ) {
94
116
// todo > handle error
95
117
switch typ {
118
+ case jsonparser .NotExist :
119
+ // path not found, skip
96
120
case jsonparser .String :
97
- res , _ = jsonparser .Set (res , append (append ([]byte {'"' }, val ... ), '"' ), e .keys [idx ]... )
121
+ res , _ = jsonparser .Set (res , append (append ([]byte {'"' }, val ... ), '"' ), e .setters [idx ]... )
98
122
default :
99
- res , _ = jsonparser .Set (res , val , e .keys [idx ]... )
123
+ res , _ = jsonparser .Set (res , val , e .setters [idx ]... )
100
124
}
101
125
},
102
- e .keys ... ,
126
+ e .getters ... ,
103
127
)
104
128
105
129
// Reset the buffer to output our own content
0 commit comments