diff --git a/doc/configuration.txt b/doc/configuration.txt index 599640750..5eef1ff88 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -1279,7 +1279,12 @@ log
[len ] [format ] [sample :] is the log format used when generating syslog messages. It may be one of the following : - rfc3164 The RFC3164 syslog message format. This is the default. + local Analog to rfc3164 syslog message format except that hostname + field is stripped. This is the default. + Note: option "log-send-hostname" switches the default to + rfc3164. + + rfc3164 The RFC3164 syslog message format. (https://tools.ietf.org/html/rfc3164) rfc5424 The RFC5424 syslog message format. @@ -2927,13 +2932,18 @@ format The PID, process name and system name are omitted. This is designed to be used with a local log server. + local Analog to rfc3164 syslog message format except that hostname + field is stripped. This is the default. + Note: option "log-send-hostname" switches the default to + rfc3164. + raw A message containing only the text. The level, PID, date, time, process name and system name are omitted. This is designed to be used in containers or during development, where the severity only depends on the file descriptor used (stdout/stderr). This is the default. - rfc3164 The RFC3164 syslog message format. This is the default. + rfc3164 The RFC3164 syslog message format. (https://tools.ietf.org/html/rfc3164) rfc5424 The RFC5424 syslog message format. @@ -7175,7 +7185,12 @@ no log is the log format used when generating syslog messages. It may be one of the following : - rfc3164 The RFC3164 syslog message format. This is the default. + local Analog to rfc3164 syslog message format except that hostname + field is stripped. This is the default. + Note: option "log-send-hostname" switches the default to + rfc3164. + + rfc3164 The RFC3164 syslog message format. (https://tools.ietf.org/html/rfc3164) rfc5424 The RFC5424 syslog message format. diff --git a/include/haproxy/log-t.h b/include/haproxy/log-t.h index bfaef7d06..c8f52f554 100644 --- a/include/haproxy/log-t.h +++ b/include/haproxy/log-t.h @@ -74,6 +74,7 @@ /* enum for log format */ enum log_fmt { LOG_FORMAT_UNSPEC = 0, + LOG_FORMAT_LOCAL, LOG_FORMAT_RFC3164, LOG_FORMAT_RFC5424, LOG_FORMAT_PRIO, diff --git a/src/log.c b/src/log.c index c6ba5e635..6014bfc2d 100644 --- a/src/log.c +++ b/src/log.c @@ -56,6 +56,9 @@ struct log_fmt_st { }; static const struct log_fmt_st log_formats[LOG_FORMATS] = { + [LOG_FORMAT_LOCAL] = { + .name = "local", + }, [LOG_FORMAT_RFC3164] = { .name = "rfc3164", }, @@ -1475,6 +1478,14 @@ struct ist *build_log_header(enum log_fmt format, int level, int facility, else format = LOG_FORMAT_RFC3164; } + else if (metadata[LOG_META_TAG].len) { + /* Tag is present but no hostname, we should + * consider we try to emmit a local log + * in legacy format (analog to RFC3164 but + * with stripped hostname). + */ + format = LOG_FORMAT_LOCAL; + } else if (metadata[LOG_META_PRIO].len) { /* the source seems a parsed message * offering a valid level/prio prefix @@ -1487,6 +1498,7 @@ struct ist *build_log_header(enum log_fmt format, int level, int facility, /* prepare priority, stored into 1 single elem */ switch (format) { + case LOG_FORMAT_LOCAL: case LOG_FORMAT_RFC3164: case LOG_FORMAT_RFC5424: case LOG_FORMAT_PRIO: @@ -1516,6 +1528,7 @@ struct ist *build_log_header(enum log_fmt format, int level, int facility, /* prepare timestamp, stored into a max of 4 elems */ switch (format) { + case LOG_FORMAT_LOCAL: case LOG_FORMAT_RFC3164: /* rfc3164 ex: 'Jan 1 00:00:00 ' */ if (metadata && metadata[LOG_META_TIME].len == LOG_LEGACYTIME_LEN) { @@ -1656,9 +1669,10 @@ struct ist *build_log_header(enum log_fmt format, int level, int facility, hdr_ctx.ist_vector[(*nbelem)++] = metadata[LOG_META_HOST]; hdr_ctx.ist_vector[(*nbelem)++] = ist2(" ", 1); } - else /* the caller MUST fill the hostname */ + else /* the caller MUST fill the hostname, this field is mandatory */ hdr_ctx.ist_vector[(*nbelem)++] = ist2("localhost ", 10); - + /* fall through */ + case LOG_FORMAT_LOCAL: if (!metadata || !metadata[LOG_META_TAG].len) break; @@ -1918,8 +1932,6 @@ void __send_log(struct list *logsrvs, struct buffer *tagb, int level, if (!metadata[LOG_META_HOST].len) { if (global.log_send_hostname) metadata[LOG_META_HOST] = ist2(global.log_send_hostname, strlen(global.log_send_hostname)); - else - metadata[LOG_META_HOST] = ist2(hostname, strlen(hostname)); } if (!tagb || !tagb->area) diff --git a/src/sink.c b/src/sink.c index 09a302633..4995270e4 100644 --- a/src/sink.c +++ b/src/sink.c @@ -191,8 +191,6 @@ int sink_announce_dropped(struct sink *sink, int facility) if (!metadata[LOG_META_HOST].len) { if (global.log_send_hostname) metadata[LOG_META_HOST] = ist2(global.log_send_hostname, strlen(global.log_send_hostname)); - else - metadata[LOG_META_HOST] = ist2(hostname, strlen(hostname)); } if (!metadata[LOG_META_TAG].len)