MINOR: log: register config file and line number on log servers.
This patch registers the parsed file and the line where a log server
is declared to make those information available in configuration
post check.
Those new informations were added on error messages probed resolving
ring names on post configuration check.
diff --git a/include/haproxy/log-t.h b/include/haproxy/log-t.h
index 9146b77..039621a 100644
--- a/include/haproxy/log-t.h
+++ b/include/haproxy/log-t.h
@@ -237,6 +237,10 @@
int minlvl;
int maxlen;
struct logsrv *ref;
+ struct {
+ char *file; /* file where the logsrv appears */
+ int line; /* line where the logsrv appears */
+ } conf;
__decl_thread(HA_SPINLOCK_T lock);
};
diff --git a/include/haproxy/log.h b/include/haproxy/log.h
index 837ae0c..8bd4486 100644
--- a/include/haproxy/log.h
+++ b/include/haproxy/log.h
@@ -86,7 +86,7 @@
int parse_logformat_string(const char *str, struct proxy *curproxy, struct list *list_format, int options, int cap, char **err);
/* Parse "log" keyword and update the linked list. */
-int parse_logsrv(char **args, struct list *logsrvs, int do_del, char **err);
+int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file, int linenum, char **err);
/*
* This function adds a header to the message and sends the syslog message
diff --git a/src/cfgparse-global.c b/src/cfgparse-global.c
index e076247..79058c6 100644
--- a/src/cfgparse-global.c
+++ b/src/cfgparse-global.c
@@ -904,7 +904,7 @@
}
}
else if (strcmp(args[0], "log") == 0) { /* "no log" or "log ..." */
- if (!parse_logsrv(args, &global.logsrvs, (kwm == KWM_NO), &errmsg)) {
+ if (!parse_logsrv(args, &global.logsrvs, (kwm == KWM_NO), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index 739dc83..49a6d14 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -2690,7 +2690,7 @@
}
}
else if (strcmp(args[0], "log") == 0) { /* "no log" or "log ..." */
- if (!parse_logsrv(args, &curproxy->logsrvs, (kwm == KWM_NO), &errmsg)) {
+ if (!parse_logsrv(args, &curproxy->logsrvs, (kwm == KWM_NO), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 8f612ee..47f04e5 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -730,7 +730,7 @@
err_code |= ERR_ALERT | ERR_ABORT;
goto out;
}
- if (!parse_logsrv(args, &curpeers->peers_fe->logsrvs, (kwm == KWM_NO), &errmsg)) {
+ if (!parse_logsrv(args, &curpeers->peers_fe->logsrvs, (kwm == KWM_NO), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
diff --git a/src/fcgi-app.c b/src/fcgi-app.c
index 61f904d..a1b6e68 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -1056,7 +1056,7 @@
}
}
else if (strcmp(args[0], "log-stderr") == 0) {
- if (!parse_logsrv(args, &curapp->logsrvs, (kwm == KWM_NO), &errmsg)) {
+ if (!parse_logsrv(args, &curapp->logsrvs, (kwm == KWM_NO), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
}
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index 5688ca9..83f6074 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -3773,7 +3773,7 @@
else if (strcmp(args[0], "log") == 0) {
char *errmsg = NULL;
- if (!parse_logsrv(args, &curlogsrvs, (kwm == 1), &errmsg)) {
+ if (!parse_logsrv(args, &curlogsrvs, (kwm == 1), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
diff --git a/src/log.c b/src/log.c
index 292eb58..c8cdafa 100644
--- a/src/log.c
+++ b/src/log.c
@@ -808,7 +808,7 @@
* The function returns 1 in success case, otherwise, it returns 0 and err is
* filled.
*/
-int parse_logsrv(char **args, struct list *logsrvs, int do_del, char **err)
+int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file, int linenum, char **err)
{
struct smp_log_range *smp_rgs = NULL;
struct sockaddr_storage *sk;
@@ -858,6 +858,8 @@
node->ref = logsrv;
LIST_INIT(&node->list);
LIST_ADDQ(logsrvs, &node->list);
+ node->conf.file = strdup(file);
+ node->conf.line = linenum;
skip_logsrv:
continue;
@@ -886,6 +888,9 @@
goto error;
}
+ logsrv->conf.file = strdup(file);
+ logsrv->conf.line = linenum;
+
/* skip address for now, it will be parsed at the end */
cur_arg = 2;
@@ -1040,18 +1045,20 @@
logsrv->addr = *sk;
if (sk->ss_family == AF_INET || sk->ss_family == AF_INET6) {
- logsrv->addr = *sk;
if (!port1)
set_host_port(&logsrv->addr, SYSLOG_PORT);
}
+
done:
LIST_ADDQ(logsrvs, &logsrv->list);
return 1;
error:
free(smp_rgs);
- if (logsrv)
+ if (logsrv) {
+ free(logsrv->conf.file);
free(logsrv->ring_name);
+ }
free(logsrv);
return 0;
}
@@ -4062,7 +4069,7 @@
}
}
else if (strcmp(args[0], "log") == 0) {
- if (!parse_logsrv(args, &cfg_log_forward->logsrvs, (kwm == KWM_NO), &errmsg)) {
+ if (!parse_logsrv(args, &cfg_log_forward->logsrvs, (kwm == KWM_NO), file, linenum, &errmsg)) {
ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
diff --git a/src/sink.c b/src/sink.c
index f734b07..5d43525 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -993,7 +993,7 @@
if (logsrv->type == LOG_TARGET_BUFFER) {
sink = sink_find(logsrv->ring_name);
if (!sink || sink->type != SINK_TYPE_BUFFER) {
- ha_alert("global log server uses unknown ring named '%s'.\n", logsrv->ring_name);
+ ha_alert("global log server declared in file '%s' at line %d uses unknown ring named '%s'.\n", logsrv->conf.file, logsrv->conf.line, logsrv->ring_name);
err_code |= ERR_ALERT | ERR_FATAL;
}
logsrv->sink = sink;
@@ -1005,7 +1005,7 @@
if (logsrv->type == LOG_TARGET_BUFFER) {
sink = sink_find(logsrv->ring_name);
if (!sink || sink->type != SINK_TYPE_BUFFER) {
- ha_alert("proxy '%s' log server uses unknown ring named '%s'.\n", px->id, logsrv->ring_name);
+ ha_alert("log server declared in proxy section '%s' in file '%s' at line %d uses unknown ring named '%s'.\n", px->id, logsrv->conf.file, logsrv->conf.line, logsrv->ring_name);
err_code |= ERR_ALERT | ERR_FATAL;
}
logsrv->sink = sink;
@@ -1018,7 +1018,7 @@
if (logsrv->type == LOG_TARGET_BUFFER) {
sink = sink_find(logsrv->ring_name);
if (!sink || sink->type != SINK_TYPE_BUFFER) {
- ha_alert("log-forward '%s' log server uses unknown ring named '%s'.\n", px->id, logsrv->ring_name);
+ ha_alert("log server declared in log-forward section '%s' in file '%s' at line %d uses unknown ring named '%s'.\n", px->id, logsrv->conf.file, logsrv->conf.line, logsrv->ring_name);
err_code |= ERR_ALERT | ERR_FATAL;
}
logsrv->sink = sink;