MEDIUM: log: split of log_format generation
* logformat functions now take a format linked list as argument
* build_logline() build a logline using a format linked list
* rename LOG_* by LOG_FMT_* in enum
* improve error management in build_logline()
diff --git a/include/proto/log.h b/include/proto/log.h
index 0ee60a0..2efb539 100644
--- a/include/proto/log.h
+++ b/include/proto/log.h
@@ -40,6 +40,8 @@
extern char clf_http_log_format[];
+int build_logline(struct session *s, char *dst, size_t maxsize, struct list *list_format);
+
/*
* send a log for the session when we have enough info about it.
* Will not log if the frontend has no log defined.
@@ -55,20 +57,19 @@
* Parse a variable '%varname' or '%{args}varname' in logformat
*
*/
-int parse_logformat_var(char *str, size_t len, struct proxy *curproxy, int *options);
+int parse_logformat_var(char *str, size_t len, struct proxy *curproxy, struct list *list_format, int *defoptions);
/*
* add to the logformat linked list
*/
-void add_to_logformat_list(char *start, char *end, int type, struct proxy *curproxy);
+void add_to_logformat_list(char *start, char *end, int type, struct list *list_format);
/*
* Parse the log_format string and fill a linked list.
* Variable name are preceded by % and composed by characters [a-zA-Z0-9]* : %varname
* You can set arguments using { } : %{many arguments}varname
*/
-void parse_logformat_string(char *str, struct proxy *curproxy);
-
+void parse_logformat_string(char *str, struct proxy *curproxy, struct list *list_format, int capabilities);
/*
* Displays the message on stderr with the date and pid. Overrides the quiet
* mode during startup.
diff --git a/include/types/log.h b/include/types/log.h
index 741fba9..efb1d91 100644
--- a/include/types/log.h
+++ b/include/types/log.h
@@ -35,49 +35,49 @@
/* lists of fields that can be logged */
enum {
- LOG_TEXT = 0, /* raw text */
+ LOG_FMT_TEXT = 0, /* raw text */
- LOG_SEPARATOR, /* separator replaced by one space */
- LOG_VARIABLE,
+ LOG_FMT_SEPARATOR, /* separator replaced by one space */
+ LOG_FMT_VARIABLE,
/* information fields */
- LOG_GLOBAL,
- LOG_CLIENTIP,
- LOG_CLIENTPORT,
- LOG_SOURCEPORT,
- LOG_SOURCEIP,
- LOG_DATE,
- LOG_DATEGMT,
- LOG_MS,
- LOG_FRONTEND,
- LOG_BACKEND,
- LOG_SERVER,
- LOG_BYTES,
- LOG_T,
- LOG_TQ,
- LOG_TW,
- LOG_TC,
- LOG_TR,
- LOG_TT,
- LOG_STATUS,
- LOG_CCLIENT,
- LOG_CSERVER,
- LOG_TERMSTATE,
- LOG_TERMSTATE_CK,
- LOG_CONN,
- LOG_ACTCONN,
- LOG_FECONN,
- LOG_BECONN,
- LOG_SRVCONN,
- LOG_RETRIES,
- LOG_QUEUES,
- LOG_SRVQUEUE,
- LOG_BCKQUEUE,
- LOG_HDRREQUEST,
- LOG_HDRRESPONS,
- LOG_HDRREQUESTLIST,
- LOG_HDRRESPONSLIST,
- LOG_REQ,
+ LOG_FMT_GLOBAL,
+ LOG_FMT_CLIENTIP,
+ LOG_FMT_CLIENTPORT,
+ LOG_FMT_BACKENDIP,
+ LOG_FMT_BACKENDPORT,
+ LOG_FMT_DATE,
+ LOG_FMT_DATEGMT,
+ LOG_FMT_MS,
+ LOG_FMT_FRONTEND,
+ LOG_FMT_BACKEND,
+ LOG_FMT_SERVER,
+ LOG_FMT_BYTES,
+ LOG_FMT_T,
+ LOG_FMT_TQ,
+ LOG_FMT_TW,
+ LOG_FMT_TC,
+ LOG_FMT_TR,
+ LOG_FMT_TT,
+ LOG_FMT_STATUS,
+ LOG_FMT_CCLIENT,
+ LOG_FMT_CSERVER,
+ LOG_FMT_TERMSTATE,
+ LOG_FMT_TERMSTATE_CK,
+ LOG_FMT_CONN,
+ LOG_FMT_ACTCONN,
+ LOG_FMT_FECONN,
+ LOG_FMT_BECONN,
+ LOG_FMT_SRVCONN,
+ LOG_FMT_RETRIES,
+ LOG_FMT_QUEUES,
+ LOG_FMT_SRVQUEUE,
+ LOG_FMT_BCKQUEUE,
+ LOG_FMT_HDRREQUEST,
+ LOG_FMT_HDRRESPONS,
+ LOG_FMT_HDRREQUESTLIST,
+ LOG_FMT_HDRRESPONSLIST,
+ LOG_FMT_REQ,
};
/* enum for parse_logformat */