From 36d7bd34c8a11e563ca8874dbca3538c0ade2b01 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 31 Aug 2018 15:03:37 +0300 Subject: [PATCH] lib: Add failure_context.log_prefix_type_pos If non-zero, this specifies where the log type (e.g. "Info: ") is written within the log prefix. By default it's appended. --- src/lib/failures.c | 15 +++++++++++++-- src/lib/failures.h | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lib/failures.c b/src/lib/failures.c index bc4841839b..2833592d8e 100644 --- a/src/lib/failures.c +++ b/src/lib/failures.c @@ -187,6 +187,8 @@ static string_t * ATTR_FORMAT(3, 0) internal_format(const struct failure_context if (ctx->log_prefix != NULL) { log_type |= LOG_TYPE_FLAG_DISABLE_LOG_PREFIX; + if (ctx->log_prefix_type_pos != 0) + log_type |= LOG_TYPE_FLAG_PREFIX_LEN; } else if (!log_prefix_sent && log_prefix != NULL) { log_prefix_sent = TRUE; i_failure_send_option("prefix", log_prefix); @@ -194,6 +196,8 @@ static string_t * ATTR_FORMAT(3, 0) internal_format(const struct failure_context str = t_str_new(128); str_printfa(str, "\001%c%s ", log_type, my_pid); + if ((log_type & LOG_TYPE_FLAG_PREFIX_LEN) != 0) + str_printfa(str, "%u ", ctx->log_prefix_type_pos); if (ctx->log_prefix != NULL) str_append(str, ctx->log_prefix); *prefix_len_r = str_len(str); @@ -335,10 +339,17 @@ static void log_prefix_add(const struct failure_context *ctx, string_t *str) /* use global log prefix */ if (log_prefix != NULL) str_append(str, log_prefix); - } else { + str_append(str, failure_log_type_prefixes[ctx->type]); + } else if (ctx->log_prefix_type_pos == 0) { str_append(str, ctx->log_prefix); + str_append(str, failure_log_type_prefixes[ctx->type]); + } else { + i_assert(ctx->log_prefix_type_pos <= strlen(ctx->log_prefix)); + str_append_data(str, ctx->log_prefix, ctx->log_prefix_type_pos); + str_insert(str, ctx->log_prefix_type_pos, + failure_log_type_prefixes[ctx->type]); + str_append(str, ctx->log_prefix + ctx->log_prefix_type_pos); } - str_append(str, failure_log_type_prefixes[ctx->type]); } static void fd_wait_writable(int fd) diff --git a/src/lib/failures.h b/src/lib/failures.h index 7e163668fd..5235edd563 100644 --- a/src/lib/failures.h +++ b/src/lib/failures.h @@ -43,6 +43,9 @@ struct failure_context { const struct tm *timestamp; /* NULL = use time() + localtime() */ unsigned int timestamp_usecs; const char *log_prefix; /* override the default log prefix */ + /* If non-0, insert the log type text (e.g. "Info: ") at this position + in the log_prefix instead of appending it. */ + unsigned int log_prefix_type_pos; }; #define DEFAULT_FAILURE_STAMP_FORMAT "%b %d %H:%M:%S "