Skip to content

Commit

Permalink
feat: json log format
Browse files Browse the repository at this point in the history
Introduce a json log format that can be invoked by passing `log-format json` in your config.
  • Loading branch information
jbergstroem committed Feb 27, 2025
1 parent 79d5047 commit cea0da3
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ configEnum propagation_error_behavior_enum[] = {
{"panic-on-replicas", PROPAGATION_ERR_BEHAVIOR_PANIC_ON_REPLICAS},
{NULL, 0}};

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

configEnum log_timestamp_format_enum[] = {{"legacy", LOG_TIMESTAMP_LEGACY},
{"iso8601", LOG_TIMESTAMP_ISO8601},
Expand Down
12 changes: 12 additions & 0 deletions src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,18 @@ void serverLogRaw(int level, const char *msg) {
}
break;

case LOG_FORMAT_JSON:
if (hasInvalidLogfmtChar(msg)) {
char safemsg[LOG_MAX_LEN];
filterInvalidLogfmtChar(safemsg, LOG_MAX_LEN, msg);
fprintf(fp, "{\"pid\":%d,\"role\":\"%s\",\"timestamp\":\"%s\",\"level\":\"%s\",\"message\":\"%s\"}\n", (int)getpid(), roles[role_index],
buf, verbose_level[level], safemsg);
} else {
fprintf(fp, "{\"pid\":%d,\"role\":\"%s\",\"timestamp\":\"%s\",\"level\":\"%s\",\"message\":\"%s\"}\n", (int)getpid(), roles[role_index],
buf, verbose_level[level], msg);
}
break;

case LOG_FORMAT_LEGACY:
fprintf(fp, "%d:%c %s %c %s\n", (int)getpid(), role_chars[role_index], buf, c[level], msg);
break;
Expand Down
3 changes: 2 additions & 1 deletion src/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,8 @@ typedef enum {

/* Sets log format */
typedef enum { LOG_FORMAT_LEGACY = 0,
LOG_FORMAT_LOGFMT } log_format_type;
LOG_FORMAT_LOGFMT,
LOG_FORMAT_JSON } log_format_type;

/* Sets log timestamp format */
typedef enum { LOG_TIMESTAMP_LEGACY = 0,
Expand Down
1 change: 1 addition & 0 deletions valkey.conf
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ loglevel notice
#
# - legacy: the default, traditional log format
# - logfmt: a structured log format; see https://www.brandur.org/logfmt
# - json: a structured log format; see https://json.org/
#
# log-format legacy

Expand Down

0 comments on commit cea0da3

Please sign in to comment.