blob: d0fb966828ccc31743e1bac9c2cdeeecfdb22b1c [file] [log] [blame]
Willy Tarreaubaaee002006-06-26 02:48:02 +02001/*
2 include/types/log.h
3 This file contains definitions of log-related structures and macros.
4
5 Copyright (C) 2000-2006 Willy Tarreau - w@1wt.eu
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation, version 2.1
10 exclusively.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/
21
22#ifndef _TYPES_LOG_H
23#define _TYPES_LOG_H
24
Willy Tarreau019767b2007-12-05 11:11:55 +010025#include <sys/socket.h>
Robert Tsai81ae1952007-12-05 10:47:29 +010026#include <sys/un.h>
27#include <netinet/in.h>
Willy Tarreaue3ba5f02006-06-29 18:54:54 +020028#include <common/config.h>
Willy Tarreauc7e42382012-08-24 19:22:53 +020029#include <common/mini-clist.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020030
Willy Tarreaubaaee002006-06-26 02:48:02 +020031#define NB_LOG_FACILITIES 24
32#define NB_LOG_LEVELS 8
33#define SYSLOG_PORT 514
William Lallemanda73203e2012-03-12 12:48:57 +010034#define UNIQUEID_LEN 128
35
Thierry FOURNIER2ba18a22015-01-23 14:07:08 +010036/* The array containing the names of the log levels. */
37extern const char *log_levels[];
Willy Tarreaubaaee002006-06-26 02:48:02 +020038
William Lallemand723b73a2012-02-08 16:37:49 +010039/* lists of fields that can be logged */
40enum {
41
William Lallemand1d705562012-03-12 12:46:41 +010042 LOG_FMT_TEXT = 0, /* raw text */
Willy Tarreauc8368452012-12-21 00:09:23 +010043 LOG_FMT_EXPR, /* sample expression */
William Lallemand1d705562012-03-12 12:46:41 +010044 LOG_FMT_SEPARATOR, /* separator replaced by one space */
45 LOG_FMT_VARIABLE,
William Lallemand723b73a2012-02-08 16:37:49 +010046
47 /* information fields */
William Lallemand1d705562012-03-12 12:46:41 +010048 LOG_FMT_GLOBAL,
49 LOG_FMT_CLIENTIP,
50 LOG_FMT_CLIENTPORT,
51 LOG_FMT_BACKENDIP,
52 LOG_FMT_BACKENDPORT,
William Lallemand5f232402012-04-05 18:02:55 +020053 LOG_FMT_FRONTENDIP,
54 LOG_FMT_FRONTENDPORT,
55 LOG_FMT_SERVERPORT,
56 LOG_FMT_SERVERIP,
57 LOG_FMT_COUNTER,
Willy Tarreau7346acb2014-08-28 15:03:15 +020058 LOG_FMT_LOGCNT,
William Lallemand5f232402012-04-05 18:02:55 +020059 LOG_FMT_PID,
William Lallemand1d705562012-03-12 12:46:41 +010060 LOG_FMT_DATE,
61 LOG_FMT_DATEGMT,
Yuxans Yao4e25b012012-10-19 10:36:09 +080062 LOG_FMT_DATELOCAL,
William Lallemand5f232402012-04-05 18:02:55 +020063 LOG_FMT_TS,
William Lallemand1d705562012-03-12 12:46:41 +010064 LOG_FMT_MS,
65 LOG_FMT_FRONTEND,
Willy Tarreau773d65f2012-10-12 14:56:11 +020066 LOG_FMT_FRONTEND_XPRT,
William Lallemand1d705562012-03-12 12:46:41 +010067 LOG_FMT_BACKEND,
68 LOG_FMT_SERVER,
69 LOG_FMT_BYTES,
Willy Tarreauc5259fd2012-12-20 15:38:04 +010070 LOG_FMT_BYTES_UP,
William Lallemand1d705562012-03-12 12:46:41 +010071 LOG_FMT_T,
72 LOG_FMT_TQ,
73 LOG_FMT_TW,
74 LOG_FMT_TC,
75 LOG_FMT_TR,
76 LOG_FMT_TT,
77 LOG_FMT_STATUS,
78 LOG_FMT_CCLIENT,
79 LOG_FMT_CSERVER,
80 LOG_FMT_TERMSTATE,
81 LOG_FMT_TERMSTATE_CK,
82 LOG_FMT_CONN,
83 LOG_FMT_ACTCONN,
84 LOG_FMT_FECONN,
85 LOG_FMT_BECONN,
86 LOG_FMT_SRVCONN,
87 LOG_FMT_RETRIES,
88 LOG_FMT_QUEUES,
89 LOG_FMT_SRVQUEUE,
90 LOG_FMT_BCKQUEUE,
91 LOG_FMT_HDRREQUEST,
92 LOG_FMT_HDRRESPONS,
93 LOG_FMT_HDRREQUESTLIST,
94 LOG_FMT_HDRRESPONSLIST,
95 LOG_FMT_REQ,
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000096 LOG_FMT_HTTP_METHOD,
97 LOG_FMT_HTTP_URI,
98 LOG_FMT_HTTP_PATH,
Andrew Hayworthe63ac872015-07-31 16:14:16 +000099 LOG_FMT_HTTP_QUERY,
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +0000100 LOG_FMT_HTTP_VERSION,
William Lallemand5f232402012-04-05 18:02:55 +0200101 LOG_FMT_HOSTNAME,
William Lallemanda73203e2012-03-12 12:48:57 +0100102 LOG_FMT_UNIQUEID,
Willy Tarreauffc3fcd2012-10-12 20:17:54 +0200103 LOG_FMT_SSL_CIPHER,
104 LOG_FMT_SSL_VERSION,
William Lallemand723b73a2012-02-08 16:37:49 +0100105};
106
Willy Tarreau8a3f52f2012-12-20 21:23:42 +0100107/* enum for parse_logformat_string */
William Lallemand723b73a2012-02-08 16:37:49 +0100108enum {
Willy Tarreau8a3f52f2012-12-20 21:23:42 +0100109 LF_INIT = 0, // before first character
110 LF_TEXT, // normal text
111 LF_SEPARATOR, // a single separator
112 LF_VAR, // variable name, after '%' or '%{..}'
113 LF_STARTVAR, // % in text
114 LF_STARG, // after '%{' and berore '}'
115 LF_EDARG, // '}' after '%{'
Willy Tarreauc8368452012-12-21 00:09:23 +0100116 LF_STEXPR, // after '%[' or '%{..}[' and berore ']'
117 LF_EDEXPR, // ']' after '%['
Willy Tarreau8a3f52f2012-12-20 21:23:42 +0100118 LF_END, // \0 found
William Lallemand723b73a2012-02-08 16:37:49 +0100119};
120
121
122struct logformat_node {
123 struct list list;
Willy Tarreauc8368452012-12-21 00:09:23 +0100124 int type; // LOG_FMT_*
125 int options; // LOG_OPT_*
126 char *arg; // text for LOG_FMT_TEXT, arg for others
127 void *expr; // for use with LOG_FMT_EXPR
William Lallemand723b73a2012-02-08 16:37:49 +0100128};
129
William Lallemand5f232402012-04-05 18:02:55 +0200130#define LOG_OPT_HEXA 0x00000001
William Lallemand723b73a2012-02-08 16:37:49 +0100131#define LOG_OPT_MANDATORY 0x00000002
132#define LOG_OPT_QUOTE 0x00000004
Willy Tarreauc8368452012-12-21 00:09:23 +0100133#define LOG_OPT_REQ_CAP 0x00000008
134#define LOG_OPT_RES_CAP 0x00000010
Thierry FOURNIERd048d8b2014-03-13 16:46:18 +0100135#define LOG_OPT_HTTP 0x00000020
William Lallemand723b73a2012-02-08 16:37:49 +0100136
Willy Tarreaubaaee002006-06-26 02:48:02 +0200137
Willy Tarreaud79a3b22012-12-28 09:40:16 +0100138/* Fields that need to be extracted from the incoming connection or request for
139 * logging or for sending specific header information. They're set in px->to_log
140 * and appear as flags in session->logs.logwait, which are removed once the
141 * required information has been collected.
142 */
143#define LW_INIT 1 /* anything */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200144#define LW_CLIP 2 /* CLient IP */
145#define LW_SVIP 4 /* SerVer IP */
146#define LW_SVID 8 /* server ID */
147#define LW_REQ 16 /* http REQuest */
148#define LW_RESP 32 /* http RESPonse */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200149#define LW_BYTES 256 /* bytes read from server */
150#define LW_COOKIE 512 /* captured cookie */
151#define LW_REQHDR 1024 /* request header(s) */
152#define LW_RSPHDR 2048 /* response header(s) */
William Lallemand5e19a282012-04-02 16:22:10 +0200153#define LW_BCKIP 4096 /* backend IP */
154#define LW_FRTIP 8192 /* frontend IP */
Willy Tarreau93dbc2b2012-10-12 18:01:49 +0200155#define LW_XPRT 16384 /* transport layer information (eg: SSL) */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200156
Robert Tsai81ae1952007-12-05 10:47:29 +0100157struct logsrv {
William Lallemand0f99e342011-10-12 17:50:54 +0200158 struct list list;
David du Colombier11bcb6c2011-03-24 12:23:00 +0100159 struct sockaddr_storage addr;
William Lallemand0f99e342011-10-12 17:50:54 +0200160 int facility;
161 int level;
162 int minlvl;
Willy Tarreau18324f52014-06-27 18:10:07 +0200163 int maxlen;
Robert Tsai81ae1952007-12-05 10:47:29 +0100164};
165
Willy Tarreaubaaee002006-06-26 02:48:02 +0200166#endif /* _TYPES_LOG_H */
167
168/*
169 * Local variables:
170 * c-indent-level: 8
171 * c-basic-offset: 8
172 * End:
173 */