[syslog-ng] [PATCH] tfjson: Make $(format-json) have less unneccessary whitespace.
Balazs Scheidler
bazsi at balabit.hu
Sat Oct 29 13:21:17 CEST 2011
Hi,
This doesn't compile with a stock json-c installation as printbuf.h and
json_object_private.h aren't installed headers.
I have json-c 0.7, do the newer ones contain this?
On Fri, 2011-10-28 at 15:39 +0200, Gergely Nagy wrote:
> When compiling with jsonc, use a custom formatter, so that the
> generated JSON does not have superflous whitespace between elements,
> and the only whitespace in the JSON is in the content parts.
>
> Signed-off-by: Gergely Nagy <algernon at balabit.hu>
> ---
> modules/tfjson/tfjson.c | 32 ++++++++++++++++++++++++++++++++
> 1 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/modules/tfjson/tfjson.c b/modules/tfjson/tfjson.c
> index 65daadd..eba2147 100644
> --- a/modules/tfjson/tfjson.c
> +++ b/modules/tfjson/tfjson.c
> @@ -28,7 +28,9 @@
> #include "config.h"
>
> #ifdef HAVE_JSON_C
> +#include <printbuf.h>
> #include <json.h>
> +#include <json_object_private.h>
> #endif
>
> #ifdef HAVE_JSON_GLIB
> @@ -54,6 +56,35 @@ tf_json_prepare(LogTemplateFunction *self, LogTemplate *parent,
> }
>
> #if HAVE_JSON_C
> +static int
> +tf_json_object_to_string (struct json_object *jso,
> + struct printbuf *pb)
> +{
> + int i = 0;
> + struct json_object_iter iter;
> + sprintbuf (pb, "{");
> +
> + json_object_object_foreachC (jso, iter)
> + {
> + gchar *esc;
> +
> + if (i)
> + sprintbuf (pb, ",");
> + sprintbuf (pb, "\"");
> + esc = g_strescape (iter.key, NULL);
> + sprintbuf (pb, esc);
> + g_free (esc);
> + sprintbuf (pb, "\":");
> + if (iter.val == NULL)
> + sprintbuf (pb, "null");
> + else
> + iter.val->_to_json_string (iter.val, pb);
> + i++;
> + }
> +
> + return sprintbuf(pb, "}");
> +}
> +
> static gboolean
> tf_json_foreach (const gchar *name, const gchar *value, gpointer user_data)
> {
> @@ -72,6 +103,7 @@ tf_json_append(GString *result, ValuePairs *vp, LogMessage *msg)
> struct json_object *json;
>
> json = json_object_new_object();
> + json->_to_json_string = tf_json_object_to_string;
>
> value_pairs_foreach(vp, tf_json_foreach, msg, 0, json);
>
--
Bazsi
More information about the syslog-ng
mailing list