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);
};
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
}
}
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;
}
}
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;
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;
}
}
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;
}
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;
* 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;
node->ref = logsrv;
LIST_INIT(&node->list);
LIST_ADDQ(logsrvs, &node->list);
+ node->conf.file = strdup(file);
+ node->conf.line = linenum;
skip_logsrv:
continue;
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;
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;
}
}
}
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;
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;
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;
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;