2
2
3
3
import com .genexus .diagnostics .LogLevel ;
4
4
import com .genexus .diagnostics .core .ILogger ;
5
+ import com .genexus .json .JSONObjectWrapper ;
5
6
import org .apache .logging .log4j .Level ;
6
7
import org .apache .logging .log4j .LogManager ;
7
8
import org .apache .logging .log4j .ThreadContext ;
14
15
import org .json .JSONArray ;
15
16
import org .json .JSONObject ;
16
17
17
- import java .util .ArrayList ;
18
- import java .util .LinkedHashMap ;
19
- import java .util .List ;
20
- import java .util .Map ;
18
+ import java .util .*;
21
19
22
20
public class Log4J2Logger implements ILogger {
23
21
private static final String STACKTRACE_KEY = "stackTrace" ;
@@ -268,7 +266,7 @@ private void writeTextFormat(String message, int logLevel, Object data, boolean
268
266
mapMessage .put (STACKTRACE_KEY , getStackTraceAsList ());
269
267
}
270
268
271
- String json = new JSONObject (mapMessage ). toString ( );
269
+ String json = mapToJsonString (mapMessage );
272
270
String format = "{} - {}" ;
273
271
log .log (getLogLevel (logLevel ), format , message , json );
274
272
}
@@ -384,16 +382,23 @@ private static boolean isJsonLogFormat() {
384
382
}
385
383
386
384
public static Map <String , Object > jsonStringToMap (String jsonString ) {
387
- JSONObject jsonObject = new JSONObject (jsonString );
385
+ JSONObjectWrapper jsonObject = new JSONObjectWrapper (jsonString );
388
386
return toMap (jsonObject );
389
387
}
390
388
391
389
private static Map <String , Object > toMap (JSONObject jsonObject ) {
392
390
Map <String , Object > map = new LinkedHashMap <>();
393
- for (String key : jsonObject .keySet ()) {
394
- Object value = jsonObject .get (key );
391
+
392
+ Set <Map .Entry <String , Object >> entries = (jsonObject instanceof JSONObjectWrapper )
393
+ ? ((JSONObjectWrapper ) jsonObject ).entrySet ()
394
+ : jsonObject .toMap ().entrySet (); // fallback for other JSONObject
395
+
396
+ for (Map .Entry <String , Object > entry : entries ) {
397
+ String key = entry .getKey ();
398
+ Object value = entry .getValue ();
395
399
map .put (key , convert (value ));
396
400
}
401
+
397
402
return map ;
398
403
}
399
404
@@ -417,4 +422,60 @@ private static Object convert(Object value) {
417
422
return value ;
418
423
}
419
424
}
425
+
426
+ public static String mapToJsonString (Map <String , Object > map ) {
427
+ StringBuilder sb = new StringBuilder ();
428
+ sb .append ("{" );
429
+
430
+ Iterator <Map .Entry <String , Object >> iterator = map .entrySet ().iterator ();
431
+ while (iterator .hasNext ()) {
432
+ Map .Entry <String , Object > entry = iterator .next ();
433
+
434
+ sb .append ("\" " ).append (entry .getKey ()).append ("\" :" );
435
+ sb .append (toJsonValue (entry .getValue ()));
436
+
437
+ if (iterator .hasNext ()) {
438
+ sb .append ("," );
439
+ }
440
+ }
441
+
442
+ sb .append ("}" );
443
+ return sb .toString ();
444
+ }
445
+
446
+ private static String toJsonValue (Object value ) {
447
+ if (value == null || value == JSONObject .NULL ) {
448
+ return "null" ;
449
+ } else if (value instanceof String ) {
450
+ return "\" " + value + "\" " ;
451
+ } else if (value instanceof Number || value instanceof Boolean ) {
452
+ return value .toString ();
453
+ } else if (value instanceof JSONObject ) {
454
+ return mapToJsonString (((JSONObject ) value ).toMap ());
455
+ } else if (value instanceof Map ) {
456
+ return mapToJsonString ((Map <String , Object >) value );
457
+ } else if (value instanceof JSONArray ) {
458
+ return listToJsonString (((JSONArray ) value ).toList ());
459
+ } else if (value instanceof Collection ) {
460
+ return listToJsonString ((Collection <?>) value );
461
+ } else {
462
+ return "\" " + value .toString () + "\" " ; // fallback: string
463
+ }
464
+ }
465
+
466
+ private static String listToJsonString (Collection <?> list ) {
467
+ StringBuilder sb = new StringBuilder ();
468
+ sb .append ("[" );
469
+
470
+ Iterator <?> it = list .iterator ();
471
+ while (it .hasNext ()) {
472
+ sb .append (toJsonValue (it .next ()));
473
+ if (it .hasNext ()) {
474
+ sb .append ("," );
475
+ }
476
+ }
477
+
478
+ sb .append ("]" );
479
+ return sb .toString ();
480
+ }
420
481
}
0 commit comments