]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: log: provide proxy context to resolve_logger()
authorAurelien DARRAGON <adarragon@haproxy.com>
Tue, 14 May 2024 15:05:30 +0000 (17:05 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Thu, 13 Jun 2024 13:43:09 +0000 (15:43 +0200)
Prerequisite work for log-profiles, we need to know under which proxy
context the logger is being used. When the info is not available, (ie:
global section or log-forward section, <px> is set to NULL)

include/haproxy/log.h
src/fcgi-app.c
src/flt_spoe.c
src/log.c

index 48b363dd43d83e84aeb93f09ddf25621e71318fe..c08a11c319023d0f68f802813d4f399da85569ac 100644 (file)
@@ -129,7 +129,7 @@ ssize_t syslog_applet_append_event(void *ctx, struct ist v1, struct ist v2, size
  */
 int parse_logformat_string(const char *str, struct proxy *curproxy, struct lf_expr *lf_expr, int options, int cap, char **err);
 
-int postresolve_logger_list(struct list *loggers, const char *section, const char *section_name);
+int postresolve_logger_list(struct proxy *px, struct list *loggers, const char *section, const char *section_name);
 
 struct logger *dup_logger(struct logger *def);
 void free_logger(struct logger *logger);
index e8117a332875317fce8f5f4bdc3b08021f59b849..5790cebcf8e3b18d1e1d35e4ef40ed38232204e0 100644 (file)
@@ -691,7 +691,7 @@ static int cfg_fcgi_apps_postparser()
                        curapp->maxreqs = 1;
                }
 
-               err_code |= postresolve_logger_list(&curapp->loggers, "fcgi-app", curapp->name);
+               err_code |= postresolve_logger_list(NULL, &curapp->loggers, "fcgi-app", curapp->name);
        }
 
   end:
index 95930f13f2fa1af9476ae856a999ba70ae5b0787..f565e962dc7342ca6026b06e80b3d6b58139703b 100644 (file)
@@ -3110,7 +3110,7 @@ spoe_check(struct proxy *px, struct flt_conf *fconf)
                HA_SPIN_INIT(&conf->agent->rt[i].lock);
        }
 
-       if (postresolve_logger_list(&conf->agent_fe.loggers, "SPOE agent", conf->agent->id) & ERR_CODE)
+       if (postresolve_logger_list(NULL, &conf->agent_fe.loggers, "SPOE agent", conf->agent->id) & ERR_CODE)
                return 1;
 
        ha_free(&conf->agent->b.name);
index d4e4932714bd4479dc3b04ebeebc8491bac1a631..974795319daacc582a6a8cb0e53519812ca901c6 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1406,13 +1406,15 @@ static int postcheck_log_backend(struct proxy *be)
 /* resolves a single logger entry (it is expected to be called
  * at postparsing stage)
  *
+ * <px> is parent proxy, used for context (may be NULL)
+ *
  * Returns err_code which defaults to ERR_NONE and can be set to a combination
  * of ERR_WARN, ERR_ALERT, ERR_FATAL and ERR_ABORT in case of errors.
  * <msg> could be set at any time (it will usually be set on error, but
  * could also be set when no error occurred to report a diag warning), thus is
  * up to the caller to check it and to free it.
  */
-static int resolve_logger(struct logger *logger, char **msg)
+static int resolve_logger(struct proxy *px, struct logger *logger, char **msg)
 {
        struct log_target *target = &logger->target;
        int err_code = ERR_NONE;
@@ -5882,7 +5884,8 @@ out:
  * Returns err_code which defaults to ERR_NONE and can be set to a combination
  * of ERR_WARN, ERR_ALERT, ERR_FATAL and ERR_ABORT in case of errors.
  */
-int postresolve_logger_list(struct list *loggers, const char *section, const char *section_name)
+int postresolve_logger_list(struct proxy *px, struct list *loggers,
+                            const char *section, const char *section_name)
 {
        int err_code = ERR_NONE;
        struct logger *logger;
@@ -5891,7 +5894,7 @@ int postresolve_logger_list(struct list *loggers, const char *section, const cha
                int cur_code;
                char *msg = NULL;
 
-               cur_code = resolve_logger(logger, &msg);
+               cur_code = resolve_logger(px, logger, &msg);
                if (msg) {
                        void (*e_func)(const char *fmt, ...) = NULL;
 
@@ -5923,13 +5926,13 @@ static int postresolve_loggers()
        int err_code = ERR_NONE;
 
        /* global log directives */
-       err_code |= postresolve_logger_list(&global.loggers, NULL, NULL);
+       err_code |= postresolve_logger_list(NULL, &global.loggers, NULL, NULL);
        /* proxy log directives */
        for (px = proxies_list; px; px = px->next)
-               err_code |= postresolve_logger_list(&px->loggers, "proxy", px->id);
+               err_code |= postresolve_logger_list(px, &px->loggers, "proxy", px->id);
        /* log-forward log directives */
        for (px = cfg_log_forward; px; px = px->next)
-               err_code |= postresolve_logger_list(&px->loggers, "log-forward", px->id);
+               err_code |= postresolve_logger_list(NULL, &px->loggers, "log-forward", px->id);
 
        return err_code;
 }