]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: log: log-format: usable without httplog and tcplog
authorWilliam Lallemand <wlallemand@exceliance.fr>
Mon, 2 Apr 2012 14:22:10 +0000 (16:22 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 7 Apr 2012 14:25:26 +0000 (16:25 +0200)
Options httplog and tcplog aren't mandatory anymore for the log-format.
The LW_ flags are now set during the log-format string parsing.

include/types/log.h
src/cfgparse.c
src/log.c

index 269fb46326e6f33d1bfe545ea89d492a9d2a551a..20868600b5f5c91856b96cda99707d5a4e5759ef 100644 (file)
@@ -117,18 +117,18 @@ struct logformat_node {
 
 
 /* fields that need to be logged. They appear as flags in session->logs.logwait */
-#define LW_DATE                1       /* date */
+#define LW_INIT                1       /* date */
 #define LW_CLIP                2       /* CLient IP */
 #define LW_SVIP                4       /* SerVer IP */
 #define LW_SVID                8       /* server ID */
 #define        LW_REQ          16      /* http REQuest */
 #define LW_RESP                32      /* http RESPonse */
-#define LW_PXIP                64      /* proxy IP */
-#define LW_PXID                128     /* proxy ID */
 #define LW_BYTES       256     /* bytes read from server */
 #define LW_COOKIE      512     /* captured cookie */
 #define LW_REQHDR      1024    /* request header(s) */
 #define LW_RSPHDR      2048    /* response header(s) */
+#define LW_BCKIP       4096    /* backend IP */
+#define LW_FRTIP       8192    /* frontend IP */
 
 struct logsrv {
        struct list list;
index 1267cd7eeb03636ca10e6145e887ad5cc6bd4074..4719abbd3b2f064807970e0f243853530d8ccf23 100644 (file)
@@ -3351,8 +3351,6 @@ stats_error_parsing:
                if (!strcmp(args[1], "httplog")) {
                        char *logformat;
                        /* generate a complete HTTP log */
-                       curproxy->options2 &= ~PR_O2_CLFLOG;
-                       curproxy->to_log |= LW_DATE | LW_CLIP | LW_SVID | LW_REQ | LW_PXID | LW_RESP | LW_BYTES;
                        logformat = default_http_log_format;
                        if (*(args[2]) != '\0') {
                                if (!strcmp(args[2], "clf")) {
@@ -3369,7 +3367,6 @@ stats_error_parsing:
                else if (!strcmp(args[1], "tcplog")) {
                        char *logformat;
                        /* generate a detailed TCP log */
-                       curproxy->to_log |= LW_DATE | LW_CLIP | LW_SVID | LW_PXID | LW_BYTES;
                        logformat = default_tcp_log_format;
                        parse_logformat_string(logformat, curproxy, &curproxy->logformat, curproxy->mode);
                }
index 130d627ba438d6129dc610f06b94ae2e4516ab90..00d0e711a2ddafdfdbb8e14c9b07328048c88bce 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -58,6 +58,7 @@ struct logformat_type {
        char *name;
        int type;
        int mode;
+       int lw; /* logwait bitsfield */
        int (*config_callback)(struct logformat_node *node, struct proxy *curproxy);
 };
 
@@ -65,50 +66,50 @@ int prepare_addrsource(struct logformat_node *node, struct proxy *curproxy);
 
 /* log_format variable names */
 static const struct logformat_type logformat_keywords[] = {
-       { "o", LOG_FMT_GLOBAL, PR_MODE_TCP, NULL },  /* global option */
-       { "Ci", LOG_FMT_CLIENTIP, PR_MODE_TCP, NULL },  /* client ip */
-       { "Cp", LOG_FMT_CLIENTPORT, PR_MODE_TCP, NULL }, /* client port */
-       { "Bp", LOG_FMT_BACKENDPORT, PR_MODE_TCP, prepare_addrsource }, /* backend source port */
-       { "Bi", LOG_FMT_BACKENDIP, PR_MODE_TCP, prepare_addrsource }, /* backend source ip */
-       { "Fp", LOG_FMT_FRONTENDPORT, PR_MODE_TCP, NULL }, /* frontend port */
-       { "Fi", LOG_FMT_FRONTENDIP, PR_MODE_TCP, NULL }, /* frontend ip */
-       { "Sp", LOG_FMT_SERVERPORT, PR_MODE_TCP, NULL }, /* server destination port */
-       { "Si", LOG_FMT_SERVERIP, PR_MODE_TCP, NULL }, /* server destination ip */
-       { "t", LOG_FMT_DATE, PR_MODE_TCP, NULL },      /* date */
-       { "T", LOG_FMT_DATEGMT, PR_MODE_TCP, NULL },   /* date GMT */
-       { "Ts", LOG_FMT_TS, PR_MODE_TCP, NULL },   /* timestamp GMT */
-       { "ms", LOG_FMT_MS, PR_MODE_TCP, NULL },       /* accept date millisecond */
-       { "f", LOG_FMT_FRONTEND, PR_MODE_TCP, NULL },  /* frontend */
-       { "b", LOG_FMT_BACKEND, PR_MODE_TCP, NULL },   /* backend */
-       { "s", LOG_FMT_SERVER, PR_MODE_TCP, NULL },    /* server */
-       { "B", LOG_FMT_BYTES, PR_MODE_TCP, NULL },     /* bytes read */
-       { "Tq", LOG_FMT_TQ, PR_MODE_HTTP, NULL },       /* Tq */
-       { "Tw", LOG_FMT_TW, PR_MODE_TCP, NULL },       /* Tw */
-       { "Tc", LOG_FMT_TC, PR_MODE_TCP, NULL },       /* Tc */
-       { "Tr", LOG_FMT_TR, PR_MODE_HTTP, NULL },       /* Tr */
-       { "Tt", LOG_FMT_TT, PR_MODE_TCP, NULL },       /* Tt */
-       { "st", LOG_FMT_STATUS, PR_MODE_HTTP, NULL },   /* status code */
-       { "cc", LOG_FMT_CCLIENT, PR_MODE_HTTP, NULL },  /* client cookie */
-       { "cs", LOG_FMT_CSERVER, PR_MODE_HTTP, NULL },  /* server cookie */
-       { "ts", LOG_FMT_TERMSTATE, PR_MODE_TCP, NULL },/* terminaison state */
-       { "tsc", LOG_FMT_TERMSTATE_CK, PR_MODE_TCP, NULL },/* terminaison state */
-       { "ac", LOG_FMT_ACTCONN, PR_MODE_TCP, NULL },  /* actconn */
-       { "fc", LOG_FMT_FECONN, PR_MODE_TCP, NULL },   /* feconn */
-       { "bc", LOG_FMT_BECONN, PR_MODE_TCP, NULL },   /* beconn */
-       { "sc", LOG_FMT_SRVCONN, PR_MODE_TCP, NULL },  /* srv_conn */
-       { "rc", LOG_FMT_RETRIES, PR_MODE_TCP, NULL },  /* retries */
-       { "sq", LOG_FMT_SRVQUEUE, PR_MODE_TCP, NULL  }, /* srv_queue */
-       { "bq", LOG_FMT_BCKQUEUE, PR_MODE_TCP, NULL }, /* backend_queue */
-       { "hr", LOG_FMT_HDRREQUEST, PR_MODE_HTTP, NULL }, /* header request */
-       { "hs", LOG_FMT_HDRRESPONS, PR_MODE_HTTP, NULL },  /* header response */
-       { "hrl", LOG_FMT_HDRREQUESTLIST, PR_MODE_HTTP, NULL }, /* header request list */
-       { "hsl", LOG_FMT_HDRRESPONSLIST, PR_MODE_HTTP, NULL },  /* header response list */
-       { "r", LOG_FMT_REQ, PR_MODE_HTTP, NULL },  /* request */
-       { "pid", LOG_FMT_PID, PR_MODE_TCP, NULL }, /* log pid */
-       { "rt", LOG_FMT_COUNTER, PR_MODE_TCP, NULL }, /* log counter */
-       { "H", LOG_FMT_HOSTNAME, PR_MODE_TCP, NULL }, /* Hostname */
-       { "ID", LOG_FMT_UNIQUEID, PR_MODE_HTTP, NULL }, /* Unique ID */
-       { 0, 0, 0, NULL }
+       { "o", LOG_FMT_GLOBAL, PR_MODE_TCP, 0, NULL },  /* global option */
+       { "Ci", LOG_FMT_CLIENTIP, PR_MODE_TCP, LW_CLIP, NULL },  /* client ip */
+       { "Cp", LOG_FMT_CLIENTPORT, PR_MODE_TCP, LW_CLIP, NULL }, /* client port */
+       { "Bp", LOG_FMT_BACKENDPORT, PR_MODE_TCP, LW_BCKIP, prepare_addrsource }, /* backend source port */
+       { "Bi", LOG_FMT_BACKENDIP, PR_MODE_TCP, LW_BCKIP, prepare_addrsource }, /* backend source ip */
+       { "Fp", LOG_FMT_FRONTENDPORT, PR_MODE_TCP, LW_FRTIP, NULL }, /* frontend port */
+       { "Fi", LOG_FMT_FRONTENDIP, PR_MODE_TCP, LW_FRTIP, NULL }, /* frontend ip */
+       { "Sp", LOG_FMT_SERVERPORT, PR_MODE_TCP, LW_SVIP, NULL }, /* server destination port */
+       { "Si", LOG_FMT_SERVERIP, PR_MODE_TCP, LW_SVIP, NULL }, /* server destination ip */
+       { "t", LOG_FMT_DATE, PR_MODE_TCP, LW_INIT, NULL },      /* date */
+       { "T", LOG_FMT_DATEGMT, PR_MODE_TCP, LW_INIT, NULL },   /* date GMT */
+       { "Ts", LOG_FMT_TS, PR_MODE_TCP, LW_INIT, NULL },   /* timestamp GMT */
+       { "ms", LOG_FMT_MS, PR_MODE_TCP, LW_INIT, NULL },       /* accept date millisecond */
+       { "f", LOG_FMT_FRONTEND, PR_MODE_TCP, LW_INIT, NULL },  /* frontend */
+       { "b", LOG_FMT_BACKEND, PR_MODE_TCP, LW_INIT, NULL },   /* backend */
+       { "s", LOG_FMT_SERVER, PR_MODE_TCP, LW_SVID, NULL },    /* server */
+       { "B", LOG_FMT_BYTES, PR_MODE_TCP, LW_BYTES, NULL },     /* bytes read */
+       { "Tq", LOG_FMT_TQ, PR_MODE_HTTP, LW_BYTES, NULL },       /* Tq */
+       { "Tw", LOG_FMT_TW, PR_MODE_TCP, LW_BYTES, NULL },       /* Tw */
+       { "Tc", LOG_FMT_TC, PR_MODE_TCP, LW_BYTES, NULL },       /* Tc */
+       { "Tr", LOG_FMT_TR, PR_MODE_HTTP, LW_BYTES, NULL },       /* Tr */
+       { "Tt", LOG_FMT_TT, PR_MODE_TCP, LW_BYTES, NULL },       /* Tt */
+       { "st", LOG_FMT_STATUS, PR_MODE_HTTP, LW_RESP, NULL },   /* status code */
+       { "cc", LOG_FMT_CCLIENT, PR_MODE_HTTP, LW_REQHDR, NULL },  /* client cookie */
+       { "cs", LOG_FMT_CSERVER, PR_MODE_HTTP, LW_RSPHDR, NULL },  /* server cookie */
+       { "ts", LOG_FMT_TERMSTATE, PR_MODE_TCP, LW_BYTES, NULL },/* termination state */
+       { "tsc", LOG_FMT_TERMSTATE_CK, PR_MODE_TCP, LW_INIT, NULL },/* termination state */
+       { "ac", LOG_FMT_ACTCONN, PR_MODE_TCP, LW_BYTES, NULL },  /* actconn */
+       { "fc", LOG_FMT_FECONN, PR_MODE_TCP, LW_BYTES, NULL },   /* feconn */
+       { "bc", LOG_FMT_BECONN, PR_MODE_TCP, LW_BYTES, NULL },   /* beconn */
+       { "sc", LOG_FMT_SRVCONN, PR_MODE_TCP, LW_BYTES, NULL },  /* srv_conn */
+       { "rc", LOG_FMT_RETRIES, PR_MODE_TCP, LW_BYTES, NULL },  /* retries */
+       { "sq", LOG_FMT_SRVQUEUE, PR_MODE_TCP, LW_BYTES, NULL  }, /* srv_queue */
+       { "bq", LOG_FMT_BCKQUEUE, PR_MODE_TCP, LW_BYTES, NULL }, /* backend_queue */
+       { "hr", LOG_FMT_HDRREQUEST, PR_MODE_HTTP, LW_REQHDR, NULL }, /* header request */
+       { "hs", LOG_FMT_HDRRESPONS, PR_MODE_HTTP, LW_RSPHDR, NULL },  /* header response */
+       { "hrl", LOG_FMT_HDRREQUESTLIST, PR_MODE_HTTP, LW_REQHDR, NULL }, /* header request list */
+       { "hsl", LOG_FMT_HDRRESPONSLIST, PR_MODE_HTTP, LW_RSPHDR, NULL },  /* header response list */
+       { "r", LOG_FMT_REQ, PR_MODE_HTTP, LW_REQ, NULL },  /* request */
+       { "pid", LOG_FMT_PID, PR_MODE_TCP, LW_INIT, NULL }, /* log pid */
+       { "rt", LOG_FMT_COUNTER, PR_MODE_HTTP, LW_REQ, NULL }, /* HTTP request counter */
+       { "H", LOG_FMT_HOSTNAME, PR_MODE_TCP, LW_INIT, NULL }, /* Hostname */
+       { "ID", LOG_FMT_UNIQUEID, PR_MODE_HTTP, LW_BYTES, NULL }, /* Unique ID */
+       { 0, 0, 0, 0, NULL }
 };
 
 char default_http_log_format[] = "%Ci:%Cp [%t] %f %b/%s %Tq/%Tw/%Tc/%Tr/%Tt %st %B %cc %cs %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"; // default format
@@ -238,6 +239,7 @@ int parse_logformat_var(char *str, size_t len, struct proxy *curproxy, struct li
                                                                        return -1;
                                                                 }
                                                        }
+                                                       curproxy->to_log |= logformat_keywords[j].lw;
                                                        LIST_ADDQ(list_format, &node->list);
                                                }
                                                return 0;
@@ -306,6 +308,8 @@ void parse_logformat_string(char *str, struct proxy *curproxy, struct list *list
        struct logformat_node *tmplf, *back;
        int options = 0;
 
+       curproxy->to_log = LW_INIT;
+
        /* flush the list first. */
        list_for_each_entry_safe(tmplf, back, list_format, list) {
                LIST_DEL(&tmplf->list);