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;