1
1
package logger
2
2
3
3
import (
4
+ "encoding/json"
4
5
"fmt"
5
6
"maps"
6
7
"os"
@@ -131,17 +132,36 @@ func (c *CNSLogger) Errorf(format string, args ...any) {
131
132
c .sendTraceInternal (msg , ai .ErrorLevel )
132
133
}
133
134
135
+ // toJSONString converts any object to a JSON string for logging purposes.
136
+ // When the object contains json.RawMessage fields, they will be properly formatted
137
+ // instead of being shown as byte arrays. Falls back to %+v if JSON marshaling fails.
138
+ func toJSONString (obj any ) string {
139
+ if obj == nil {
140
+ return "null"
141
+ }
142
+
143
+ bytes , err := json .Marshal (obj )
144
+ if err != nil {
145
+ // Fall back to standard formatting if JSON marshaling fails
146
+ return fmt .Sprintf ("%+v" , obj )
147
+ }
148
+ return string (bytes )
149
+ }
150
+
134
151
func (c * CNSLogger ) Request (tag string , request any , err error ) {
135
152
c .logger .Request (tag , request , err )
136
153
if c .th == nil || c .disableTraceLogging {
137
154
return
138
155
}
156
+
157
+ requestString := toJSONString (request )
158
+
139
159
var msg string
140
160
lvl := ai .InfoLevel
141
161
if err == nil {
142
- msg = fmt .Sprintf ("[%s] Received %T %+v ." , tag , request , request )
162
+ msg = fmt .Sprintf ("[%s] Received %T %s ." , tag , request , requestString )
143
163
} else {
144
- msg = fmt .Sprintf ("[%s] Failed to decode %T %+v %s." , tag , request , request , err .Error ())
164
+ msg = fmt .Sprintf ("[%s] Failed to decode %T %s %s." , tag , request , requestString , err .Error ())
145
165
lvl = ai .ErrorLevel
146
166
}
147
167
c .sendTraceInternal (msg , lvl )
@@ -152,16 +172,19 @@ func (c *CNSLogger) Response(tag string, response any, returnCode types.Response
152
172
if c .th == nil || c .disableTraceLogging {
153
173
return
154
174
}
175
+
176
+ responseString := toJSONString (response )
177
+
155
178
var msg string
156
179
lvl := ai .InfoLevel
157
180
switch {
158
181
case err == nil && returnCode == 0 :
159
- msg = fmt .Sprintf ("[%s] Sent %T %+v ." , tag , response , response )
182
+ msg = fmt .Sprintf ("[%s] Sent %T %s ." , tag , response , responseString )
160
183
case err != nil :
161
- msg = fmt .Sprintf ("[%s] Code:%s, %+v %s." , tag , returnCode .String (), response , err .Error ())
184
+ msg = fmt .Sprintf ("[%s] Code:%s, %s %s." , tag , returnCode .String (), responseString , err .Error ())
162
185
lvl = ai .ErrorLevel
163
186
default :
164
- msg = fmt .Sprintf ("[%s] Code:%s, %+v ." , tag , returnCode .String (), response )
187
+ msg = fmt .Sprintf ("[%s] Code:%s, %s ." , tag , returnCode .String (), responseString )
165
188
}
166
189
c .sendTraceInternal (msg , lvl )
167
190
}
@@ -171,16 +194,20 @@ func (c *CNSLogger) ResponseEx(tag string, request, response any, returnCode typ
171
194
if c .th == nil || c .disableTraceLogging {
172
195
return
173
196
}
197
+
198
+ requestString := toJSONString (request )
199
+ responseString := toJSONString (response )
200
+
174
201
var msg string
175
202
lvl := ai .InfoLevel
176
203
switch {
177
204
case err == nil && returnCode == 0 :
178
- msg = fmt .Sprintf ("[%s] Sent %T %+v %T %+v ." , tag , request , request , response , response )
205
+ msg = fmt .Sprintf ("[%s] Sent %T %s %T %s ." , tag , request , requestString , response , responseString )
179
206
case err != nil :
180
- msg = fmt .Sprintf ("[%s] Code:%s, %+v , %+v , %s." , tag , returnCode .String (), request , response , err .Error ())
207
+ msg = fmt .Sprintf ("[%s] Code:%s, %s , %s , %s." , tag , returnCode .String (), requestString , responseString , err .Error ())
181
208
lvl = ai .ErrorLevel
182
209
default :
183
- msg = fmt .Sprintf ("[%s] Code:%s, %+v , %+v ." , tag , returnCode .String (), request , response )
210
+ msg = fmt .Sprintf ("[%s] Code:%s, %s , %s ." , tag , returnCode .String (), requestString , responseString )
184
211
}
185
212
c .sendTraceInternal (msg , lvl )
186
213
}
0 commit comments