@Override
    public Thrown deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
      final JsonObject thrownObject = json.getAsJsonObject();
      final String message = thrownObject.get("message").getAsString();
      final String name = thrownObject.get("name").getAsString();
      final JsonElement extendedStackTrace = thrownObject.get("extendedStackTrace");
      if (extendedStackTrace.isJsonPrimitive()) {
        String stacktrace = extendedStackTrace.getAsString().trim();
        return new Thrown(message, name, stacktrace);
      } else if (extendedStackTrace.isJsonArray()) {
        final JsonArray array = extendedStackTrace.getAsJsonArray();
        StringBuilder sb = new StringBuilder();
        sb.append(name)
          .append(": ")
          .append(message)
          .append("\n");
        array.forEach(s -> {
          final JsonObject object = s.getAsJsonObject();
          sb.append("\tat ")
            .append(object.get("class").getAsString())
            .append(".")
            .append(object.get("method").getAsString())
            .append("(")
            .append(object.get("file").getAsString())
            .append(":")
            .append(object.get("line").getAsInt())
            .append(")\n");
        });
        return new Thrown(message, name, sb.toString().trim());
      }
      return null;
    }
Parser of log in json format. It can skip if between json object are some junk (from standard output). From properties
are taken mappings from Json ~xpath to LogData fields. For example if Json field logMessage contains information about
message, it should be written as message=logMessage
olv-core/src/main/java/pl/otros/logview/parser/json/log4j2/Log4j2JsonLogParser.java