Skip to content

Commit d8edd52

Browse files
committed
feat: json log format
Introduce a json log format that can be invoked by passing `log-format json` in your config. Signed-off-by: Johan Bergström <[email protected]>
1 parent 79d5047 commit d8edd52

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

Diff for: src/config.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ configEnum propagation_error_behavior_enum[] = {
153153
{"panic-on-replicas", PROPAGATION_ERR_BEHAVIOR_PANIC_ON_REPLICAS},
154154
{NULL, 0}};
155155

156-
configEnum log_format_enum[] = {{"legacy", LOG_FORMAT_LEGACY}, {"logfmt", LOG_FORMAT_LOGFMT}, {NULL, 0}};
156+
configEnum log_format_enum[] = {{"legacy", LOG_FORMAT_LEGACY}, {"logfmt", LOG_FORMAT_LOGFMT}, {"json", LOG_FORMAT_JSON}, {NULL, 0}};
157157

158158
configEnum log_timestamp_format_enum[] = {{"legacy", LOG_TIMESTAMP_LEGACY},
159159
{"iso8601", LOG_TIMESTAMP_ISO8601},

Diff for: src/server.c

+12
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,18 @@ void serverLogRaw(int level, const char *msg) {
240240
}
241241
break;
242242

243+
case LOG_FORMAT_JSON:
244+
if (hasInvalidLogfmtChar(msg)) {
245+
char safemsg[LOG_MAX_LEN];
246+
filterInvalidLogfmtChar(safemsg, LOG_MAX_LEN, msg);
247+
fprintf(fp, "{\"pid\":%d,\"role\":\"%s\",\"timestamp\":\"%s\",\"level\":\"%s\",\"message\":\"%s\"}\n", (int)getpid(), roles[role_index],
248+
buf, verbose_level[level], safemsg);
249+
} else {
250+
fprintf(fp, "{\"pid\":%d,\"role\":\"%s\",\"timestamp\":\"%s\",\"level\":\"%s\",\"message\":\"%s\"}\n", (int)getpid(), roles[role_index],
251+
buf, verbose_level[level], msg);
252+
}
253+
break;
254+
243255
case LOG_FORMAT_LEGACY:
244256
fprintf(fp, "%d:%c %s %c %s\n", (int)getpid(), role_chars[role_index], buf, c[level], msg);
245257
break;

Diff for: src/server.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,8 @@ typedef enum {
595595

596596
/* Sets log format */
597597
typedef enum { LOG_FORMAT_LEGACY = 0,
598-
LOG_FORMAT_LOGFMT } log_format_type;
598+
LOG_FORMAT_LOGFMT,
599+
LOG_FORMAT_JSON } log_format_type;
599600

600601
/* Sets log timestamp format */
601602
typedef enum { LOG_TIMESTAMP_LEGACY = 0,

Diff for: valkey.conf

+1
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ loglevel notice
401401
#
402402
# - legacy: the default, traditional log format
403403
# - logfmt: a structured log format; see https://www.brandur.org/logfmt
404+
# - json: a structured log format; see https://json.org/
404405
#
405406
# log-format legacy
406407

0 commit comments

Comments
 (0)