MEDIUM: log-format: Use standard HAProxy log system to report errors
The function log format emit its own error message using Alert(). This
patch replaces this behavior and uses the standard HAProxy error system
(with memprintf).
The benefits are:
- cleaning the log system
- the logformat can ignore the caller (actually the caller must set
a flag designing the caller function).
- Make the usage of the logformat function easy for future components.
diff --git a/src/proto_http.c b/src/proto_http.c
index 725ea9c..6dfc8f9 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -9139,8 +9139,12 @@
LIST_INIT(&rule->arg.hdr_add.fmt);
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 1], proxy, &rule->arg.hdr_add.fmt, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9171,8 +9175,12 @@
}
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 2], proxy, &rule->arg.hdr_add.fmt, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
@@ -9285,8 +9293,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9313,8 +9325,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9341,8 +9357,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9372,14 +9392,22 @@
proxy->conf.args.ctx = ARGC_HRQ;
/* key pattern */
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s' key: %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
/* value pattern */
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 1], proxy, &rule->arg.map.value, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-request %s' pattern: %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9551,8 +9579,12 @@
LIST_INIT(&rule->arg.hdr_add.fmt);
proxy->conf.args.ctx = ARGC_HRS;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 1], proxy, &rule->arg.hdr_add.fmt, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9583,8 +9615,12 @@
}
proxy->conf.args.ctx = ARGC_HRQ;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 2], proxy, &rule->arg.hdr_add.fmt, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
@@ -9631,8 +9667,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRS;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9660,8 +9700,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRS;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s': %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9688,8 +9732,12 @@
LIST_INIT(&rule->arg.map.key);
proxy->conf.args.ctx = ARGC_HRS;
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s' %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
free(proxy->conf.lfs_file);
@@ -9720,14 +9768,22 @@
proxy->conf.args.ctx = ARGC_HRS;
/* key pattern */
+ error = NULL;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.map.key, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s' name: %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
/* value pattern */
+ error = NULL;
if (!parse_logformat_string(args[cur_arg + 1], proxy, &rule->arg.map.value, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR)) {
+ (proxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR, &error)) {
+ Alert("parsing [%s:%d]: 'http-response %s' value: %s.\n",
+ file, linenum, args[0], error);
+ free(error);
goto out_err;
}
@@ -9975,7 +10031,8 @@
if (!(type == REDIRECT_TYPE_PREFIX && destination[0] == '/' && destination[1] == '\0')) {
if (!parse_logformat_string(destination, curproxy, &rule->rdr_fmt, LOG_OPT_HTTP,
dir ? (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRS_HDR : SMP_VAL_BE_HRS_HDR
- : (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ : (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
+ errmsg)) {
return NULL;
}
free(curproxy->conf.lfs_file);
@@ -12471,7 +12528,7 @@
LIST_INIT(&rule->arg.http.logfmt);
proxy->conf.args.ctx = ARGC_HRQ;
if (!parse_logformat_string(args[cur_arg], proxy, &rule->arg.http.logfmt, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR)) {
+ (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR, err)) {
return ACT_RET_PRS_ERR;
}