MEDIUM: logs: add support for RFC5424 header format per logger
The function __send_log() iterates over senders and passes the header as
the first vector to sendmsg(), thus it can send a logger-specific header
in each message.
A new logger arguments "format rfc5424" should be used in order to enable
RFC5424 header format. For example:
log 10.2.3.4:1234 len 2048 format rfc5424 local2 info
diff --git a/include/proto/log.h b/include/proto/log.h
index e8b57d8..fca7fdd 100644
--- a/include/proto/log.h
+++ b/include/proto/log.h
@@ -39,7 +39,12 @@
extern char default_tcp_log_format[];
extern char default_http_log_format[];
extern char clf_http_log_format[];
+
+extern char default_host_tag_pid_log_format[];
+extern char rfc5424_host_tag_pid_log_format[];
+
extern char *logheader;
+extern char *logheader_rfc5424;
extern char *logline;
@@ -109,6 +114,11 @@
void __send_log(struct proxy *p, int level, char *message, size_t size);
/*
+ * returns log format for <fmt> or -1 if not found.
+ */
+int get_log_format(const char *fmt);
+
+/*
* returns log level for <lev> or -1 if not found.
*/
int get_log_level(const char *lev);
@@ -141,7 +151,7 @@
/*
* Write hostname, log_tag and pid to the log string
*/
-char *lf_host_tag_pid(char *dst, const char *hostname, const char *log_tag, int pid, size_t size);
+char *lf_host_tag_pid(char *dst, const char *format, const char *hostname, const char *log_tag, int pid, size_t size);
#endif /* _PROTO_LOG_H */
diff --git a/include/types/log.h b/include/types/log.h
index 0214ae6..2cfd31a 100644
--- a/include/types/log.h
+++ b/include/types/log.h
@@ -37,6 +37,13 @@
/* The array containing the names of the log levels. */
extern const char *log_levels[];
+/* enum for log format */
+enum {
+ LOG_FORMAT_RFC3164 = 0,
+ LOG_FORMAT_RFC5424,
+ LOG_FORMATS, /* number of supported log formats, must always be last */
+};
+
/* lists of fields that can be logged */
enum {
@@ -158,6 +165,7 @@
struct logsrv {
struct list list;
struct sockaddr_storage addr;
+ int format;
int facility;
int level;
int minlvl;
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 1400126..9793a29 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -346,7 +346,8 @@
struct list logsrvs;
struct list logformat; /* log_format linked list */
char *log_tag; /* override default syslog tag */
- struct chunk log_htp; /* a syslog header part that contains hostname, log_tag and pid */
+ struct chunk log_htp; /* a syslog header part that contains hostname, log_tag and pid (RFC3164 format) */
+ struct chunk log_htp_rfc5424; /* a syslog header part that contains hostname, log_tag and pid (RFC5424 format) */
char *header_unique_id; /* unique-id header */
struct list format_unique_id; /* unique-id format */
int to_log; /* things to be logged (LW_*) */