@@ -44,7 +44,7 @@ type truncateFields struct {
44
44
truncate truncater
45
45
}
46
46
47
- type truncater func (* truncateFields , []byte ) ([]byte , error )
47
+ type truncater func (* truncateFields , []byte ) ([]byte , bool , error )
48
48
49
49
func init () {
50
50
processors .RegisterPlugin ("truncate_fields" ,
@@ -99,80 +99,92 @@ func (f *truncateFields) truncateSingleField(field string, event *beat.Event) (*
99
99
if f .config .IgnoreMissing && errors .Cause (err ) == common .ErrKeyNotFound {
100
100
return event , nil
101
101
}
102
- return event , fmt . Errorf ( "could not fetch value for key: %s, Error: %+v " , field , err )
102
+ return event , errors . Wrapf ( err , "could not fetch value for key: %s" , field )
103
103
}
104
104
105
105
switch value := v .(type ) {
106
- case string :
107
- return f .addTruncatedString (field , value , event )
108
106
case []byte :
109
107
return f .addTruncatedByte (field , value , event )
108
+ case string :
109
+ return f .addTruncatedString (field , value , event )
110
110
default :
111
111
return event , fmt .Errorf ("value cannot be truncated: %+v" , value )
112
112
}
113
113
114
114
}
115
115
116
116
func (f * truncateFields ) addTruncatedString (field , value string , event * beat.Event ) (* beat.Event , error ) {
117
- truncated , err := f .truncate (f , []byte (value ))
117
+ truncated , isTruncated , err := f .truncate (f , []byte (value ))
118
118
if err != nil {
119
119
return event , err
120
120
}
121
121
_ , err = event .PutValue (field , string (truncated ))
122
122
if err != nil {
123
123
return event , fmt .Errorf ("could not add truncated string value for key: %s, Error: %+v" , field , err )
124
124
}
125
+
126
+ if isTruncated {
127
+ common .AddTagsWithKey (event .Fields , "log.flags" , []string {"truncated" })
128
+ }
129
+
125
130
return event , nil
126
131
}
127
132
128
133
func (f * truncateFields ) addTruncatedByte (field string , value []byte , event * beat.Event ) (* beat.Event , error ) {
129
- truncated , err := f .truncate (f , value )
134
+ truncated , isTruncated , err := f .truncate (f , value )
130
135
if err != nil {
131
136
return event , err
132
137
}
133
138
_ , err = event .PutValue (field , truncated )
134
139
if err != nil {
135
140
return event , fmt .Errorf ("could not add truncated byte slice value for key: %s, Error: %+v" , field , err )
136
141
}
142
+
143
+ if isTruncated {
144
+ common .AddTagsWithKey (event .Fields , "log.flags" , []string {"truncated" })
145
+ }
146
+
137
147
return event , nil
138
148
}
139
149
140
- func (f * truncateFields ) truncateBytes (value []byte ) ([]byte , error ) {
150
+ func (f * truncateFields ) truncateBytes (value []byte ) ([]byte , bool , error ) {
141
151
size := len (value )
142
- if size > f .config .MaxBytes {
143
- size = f . config . MaxBytes
152
+ if size <= f .config .MaxBytes {
153
+ return value , false , nil
144
154
}
145
155
156
+ size = f .config .MaxBytes
146
157
truncated := make ([]byte , size )
147
158
n := copy (truncated , value [:size ])
148
159
if n != size {
149
- return nil , fmt .Errorf ("unexpected number of bytes were copied" )
160
+ return nil , false , fmt .Errorf ("unexpected number of bytes were copied" )
150
161
}
151
- return truncated , nil
162
+ return truncated , true , nil
152
163
}
153
164
154
- func (f * truncateFields ) truncateCharacters (value []byte ) ([]byte , error ) {
165
+ func (f * truncateFields ) truncateCharacters (value []byte ) ([]byte , bool , error ) {
155
166
count := utf8 .RuneCount (value )
156
- if count > f .config .MaxChars {
157
- count = f . config . MaxChars
167
+ if count <= f .config .MaxChars {
168
+ return value , false , nil
158
169
}
159
170
171
+ count = f .config .MaxChars
160
172
r := bytes .NewReader (value )
161
173
w := bytes .NewBuffer (nil )
162
174
163
175
for i := 0 ; i < count ; i ++ {
164
176
r , _ , err := r .ReadRune ()
165
177
if err != nil {
166
- return nil , err
178
+ return nil , false , err
167
179
}
168
180
169
181
_ , err = w .WriteRune (r )
170
182
if err != nil {
171
- return nil , err
183
+ return nil , false , err
172
184
}
173
185
}
174
186
175
- return w .Bytes (), nil
187
+ return w .Bytes (), true , nil
176
188
}
177
189
178
190
func (f * truncateFields ) String () string {
0 commit comments