From 27b639d37fb4f4c255272ce8fbdebafbf5688302 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 17 May 2016 17:55:27 +0200 Subject: [PATCH] MINOR: log: add the %Td log-format specifier As suggested by Pavlos, it's too bad that we didn't have a %Td log format tag given that there are a few mentions of Td corresponding to the data transmission time already in the doc, so this is now done. Just like the other specifiers, we report -1 if the connection failed before reaching the data transmission state. --- doc/configuration.txt | 1 + include/types/log.h | 1 + src/log.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/doc/configuration.txt b/doc/configuration.txt index 80b9c017f..1099695df 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -14699,6 +14699,7 @@ Please refer to the table below for currently defined variables : | | %ST | status_code | numeric | | | %T | gmt_date_time | date | | | %Tc | Tc | numeric | + | | %Td | Td = Tt - (Tq + Tw + Tc + Tr) | numeric | | | %Tl | local_date_time | date | | H | %Tq | Tq | numeric | | H | %Tr | Tr | numeric | diff --git a/include/types/log.h b/include/types/log.h index e9740869a..25d872edc 100644 --- a/include/types/log.h +++ b/include/types/log.h @@ -81,6 +81,7 @@ enum { LOG_FMT_TW, LOG_FMT_TC, LOG_FMT_TR, + LOG_FMT_TD, LOG_FMT_TT, LOG_FMT_STATUS, LOG_FMT_CCLIENT, diff --git a/src/log.c b/src/log.c index 2d0224704..99c89f34d 100644 --- a/src/log.c +++ b/src/log.c @@ -127,6 +127,7 @@ static const struct logformat_type logformat_keywords[] = { { "Tl", LOG_FMT_DATELOCAL, PR_MODE_TCP, LW_INIT, NULL }, /* date local timezone */ { "Tq", LOG_FMT_TQ, PR_MODE_HTTP, LW_BYTES, NULL }, /* Tq */ { "Tr", LOG_FMT_TR, PR_MODE_HTTP, LW_BYTES, NULL }, /* Tr */ + { "Td", LOG_FMT_TD, PR_MODE_TCP, LW_BYTES, NULL }, /* Td = Tt - (Tq + Tw + Tc + Tr) */ { "Ts", LOG_FMT_TS, PR_MODE_TCP, LW_INIT, NULL }, /* timestamp GMT */ { "Tt", LOG_FMT_TT, PR_MODE_TCP, LW_BYTES, NULL }, /* Tt */ { "Tw", LOG_FMT_TW, PR_MODE_TCP, LW_BYTES, NULL }, /* Tw */ @@ -1655,6 +1656,19 @@ int build_logline(struct stream *s, char *dst, size_t maxsize, struct list *list last_isspace = 0; break; + case LOG_FMT_TD: // %Td + if (s->be->mode == PR_MODE_HTTP) + ret = ltoa_o((s->logs.t_data >= 0) ? s->logs.t_close - s->logs.t_data : -1, + tmplog, dst + maxsize - tmplog); + else + ret = ltoa_o((s->logs.t_connect >= 0) ? s->logs.t_close - s->logs.t_connect : -1, + tmplog, dst + maxsize - tmplog); + if (ret == NULL) + goto out; + tmplog = ret; + last_isspace = 0; + break; + case LOG_FMT_TT: // %Tt if (!(fe->to_log & LW_BYTES)) LOGCHAR('+');