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.
This commit is contained in:
Emeric Brun 2021-04-02 10:13:43 +02:00 committed by Willy Tarreau
parent ce325c4360
commit 9533a70381
9 changed files with 24 additions and 13 deletions

View File

@ -237,6 +237,10 @@ struct logsrv {
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);
};

View File

@ -86,7 +86,7 @@ int add_to_logformat_list(char *start, char *end, int type, struct list *list_fo
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

View File

@ -904,7 +904,7 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
}
}
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;

View File

@ -2690,7 +2690,7 @@ stats_error_parsing:
}
}
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;

View File

@ -730,7 +730,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
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;

View File

@ -1056,7 +1056,7 @@ static int cfg_parse_fcgi_app(const char *file, int linenum, char **args, int kw
}
}
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;
}

View File

@ -3773,7 +3773,7 @@ cfg_parse_spoe_agent(const char *file, int linenum, char **args, int kwm)
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;

View File

@ -808,7 +808,7 @@ int smp_log_range_cmp(const void *a, const void *b)
* 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 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, char **err)
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 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, char **err)
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 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, char **err)
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 @@ int cfg_parse_log_forward(const char *file, int linenum, char **args, int kwm)
}
}
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;

View File

@ -993,7 +993,7 @@ int post_sink_resolve()
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 @@ int post_sink_resolve()
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 @@ int post_sink_resolve()
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;