summaryrefslogtreecommitdiffstats
path: root/include/haproxy/log-t.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/haproxy/log-t.h')
-rw-r--r--include/haproxy/log-t.h120
1 files changed, 50 insertions, 70 deletions
diff --git a/include/haproxy/log-t.h b/include/haproxy/log-t.h
index a0a25ac..8768e10 100644
--- a/include/haproxy/log-t.h
+++ b/include/haproxy/log-t.h
@@ -38,6 +38,7 @@
#define UNIQUEID_LEN 128
/* flags used in logformat_node->options */
+#define LOG_OPT_NONE 0x00000000
#define LOG_OPT_HEXA 0x00000001
#define LOG_OPT_MANDATORY 0x00000002
#define LOG_OPT_QUOTE 0x00000004
@@ -46,6 +47,11 @@
#define LOG_OPT_HTTP 0x00000020
#define LOG_OPT_ESC 0x00000040
#define LOG_OPT_MERGE_SPACES 0x00000080
+#define LOG_OPT_BIN 0x00000100
+/* unused: 0x00000200 ... 0x00000800 */
+#define LOG_OPT_ENCODE_JSON 0x00001000
+#define LOG_OPT_ENCODE_CBOR 0x00002000
+#define LOG_OPT_ENCODE 0x00003000
/* Fields that need to be extracted from the incoming connection or request for
@@ -122,75 +128,10 @@ enum log_tgt {
/* lists of fields that can be logged, for logformat_node->type */
enum {
- LOG_FMT_TEXT = 0, /* raw text */
- LOG_FMT_EXPR, /* sample expression */
+ LOG_FMT_TEXT = 0, /* raw text */
+ LOG_FMT_EXPR, /* sample expression */
LOG_FMT_SEPARATOR, /* separator replaced by one space */
-
- /* information fields */
- LOG_FMT_GLOBAL,
- LOG_FMT_CLIENTIP,
- LOG_FMT_CLIENTPORT,
- LOG_FMT_BACKENDIP,
- LOG_FMT_BACKENDPORT,
- LOG_FMT_FRONTENDIP,
- LOG_FMT_FRONTENDPORT,
- LOG_FMT_SERVERPORT,
- LOG_FMT_SERVERIP,
- LOG_FMT_COUNTER,
- LOG_FMT_LOGCNT,
- LOG_FMT_PID,
- LOG_FMT_DATE,
- LOG_FMT_DATEGMT,
- LOG_FMT_DATELOCAL,
- LOG_FMT_TS,
- LOG_FMT_MS,
- LOG_FMT_FRONTEND,
- LOG_FMT_FRONTEND_XPRT,
- LOG_FMT_BACKEND,
- LOG_FMT_SERVER,
- LOG_FMT_BYTES,
- LOG_FMT_BYTES_UP,
- LOG_FMT_Ta,
- LOG_FMT_Th,
- LOG_FMT_Ti,
- LOG_FMT_TQ,
- LOG_FMT_TW,
- LOG_FMT_TC,
- LOG_FMT_Tr,
- LOG_FMT_tr,
- LOG_FMT_trg,
- LOG_FMT_trl,
- LOG_FMT_TR,
- LOG_FMT_TD,
- LOG_FMT_TT,
- LOG_FMT_TU,
- LOG_FMT_STATUS,
- LOG_FMT_CCLIENT,
- LOG_FMT_CSERVER,
- LOG_FMT_TERMSTATE,
- LOG_FMT_TERMSTATE_CK,
- LOG_FMT_ACTCONN,
- LOG_FMT_FECONN,
- LOG_FMT_BECONN,
- LOG_FMT_SRVCONN,
- LOG_FMT_RETRIES,
- LOG_FMT_SRVQUEUE,
- LOG_FMT_BCKQUEUE,
- LOG_FMT_HDRREQUEST,
- LOG_FMT_HDRRESPONS,
- LOG_FMT_HDRREQUESTLIST,
- LOG_FMT_HDRRESPONSLIST,
- LOG_FMT_REQ,
- LOG_FMT_HTTP_METHOD,
- LOG_FMT_HTTP_URI,
- LOG_FMT_HTTP_PATH,
- LOG_FMT_HTTP_PATH_ONLY,
- LOG_FMT_HTTP_QUERY,
- LOG_FMT_HTTP_VERSION,
- LOG_FMT_HOSTNAME,
- LOG_FMT_UNIQUEID,
- LOG_FMT_SSL_CIPHER,
- LOG_FMT_SSL_VERSION,
+ LOG_FMT_ALIAS, /* reference to logformat_alias */
};
/* enum for parse_logformat_string */
@@ -198,8 +139,11 @@ enum {
LF_INIT = 0, // before first character
LF_TEXT, // normal text
LF_SEPARATOR, // a single separator
- LF_VAR, // variable name, after '%' or '%{..}'
- LF_STARTVAR, // % in text
+ LF_ALIAS, // alias name, after '%' or '%{..}'
+ LF_STARTALIAS, // % in text
+ LF_STONAME, // after '%(' and before ')'
+ LF_STOTYPE, // after ':' while in STONAME
+ LF_EDONAME, // ')' after '%('
LF_STARG, // after '%{' and berore '}'
LF_EDARG, // '}' after '%{'
LF_STEXPR, // after '%[' or '%{..}[' and berore ']'
@@ -207,13 +151,49 @@ enum {
LF_END, // \0 found
};
+/* log_format aliases (ie: %alias), see logformat_aliases table in log.c for
+ * available aliases definitions
+ */
+struct logformat_node; // forward-declaration
+struct logformat_alias {
+ char *name;
+ int type;
+ int mode;
+ int lw; /* logwait bitsfield */
+ int (*config_callback)(struct logformat_node *node, struct proxy *curproxy);
+};
struct logformat_node {
struct list list;
int type; // LOG_FMT_*
int options; // LOG_OPT_*
+ int typecast; // explicit typecasting for printing purposes (SMP_T_{SAME,BOOL,STR,SINT})
+ char *name; // printable name for output types that require named fields (ie: json)
char *arg; // text for LOG_FMT_TEXT, arg for others
void *expr; // for use with LOG_FMT_EXPR
+ const struct logformat_alias *alias; // set if ->type == LOG_FMT_ALIAS
+};
+
+enum lf_expr_flags {
+ LF_FL_NONE = 0x00,
+ LF_FL_COMPILED = 0x01
+};
+
+/* a full logformat expr made of one or multiple logformat nodes */
+struct lf_expr {
+ struct list list; /* to store lf_expr inside a list */
+ union {
+ struct {
+ struct list list; /* logformat_node list */
+ int options; /* global '%o' options (common to all nodes) */
+ } nodes;
+ char *str; /* original string prior to parsing (NULL once compiled) */
+ };
+ struct {
+ char *file; /* file where the lft appears */
+ int line; /* line where the lft appears */
+ } conf; // parsing hints
+ uint8_t flags; /* LF_FL_* flags */
};
/* Range of indexes for log sampling. */