public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: Stefano Brivio <sbrivio@redhat.com>
To: passt-dev@passt.top
Cc: Yalan Zhang <yalzhang@redhat.com>,
	David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH v4 3/8] conf, log: Instead of abusing log levels, add log_conf_parsed flag
Date: Thu, 20 Jun 2024 06:07:55 +0200	[thread overview]
Message-ID: <20240620040800.3065684-4-sbrivio@redhat.com> (raw)
In-Reply-To: <20240620040800.3065684-1-sbrivio@redhat.com>

We currently use a LOG_EMERG log mask to represent the fact that we
don't know yet what the mask resulting from configuration should be,
before the command line is parsed.

However, we have the necessity of representing another phase as well,
that is, configuration is parsed but we didn't daemonise yet, or
we're not ready for operation yet. The next patch will add that
notion explicitly.

Mapping these cases to further log levels isn't really practical.
Introduce boolean log flags to represent them, instead of abusing
log priorities.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
---
 conf.c |  5 ++---
 log.c  | 12 +++++-------
 log.h  |  3 +++
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/conf.c b/conf.c
index 9f869f5..726efaf 100644
--- a/conf.c
+++ b/conf.c
@@ -1687,9 +1687,6 @@ void conf(struct ctx *c, int argc, char **argv)
 			     logfile, logsize);
 	}
 
-	/* Once the log mask is not LOG_EARLY, we will no longer log to stderr
-	 * if there was a log file specified.
-	 */
 	if (c->debug)
 		__setlogmask(LOG_UPTO(LOG_DEBUG));
 	else if (c->quiet)
@@ -1697,6 +1694,8 @@ void conf(struct ctx *c, int argc, char **argv)
 	else
 		__setlogmask(LOG_UPTO(LOG_INFO));
 
+	log_conf_parsed = true;		/* Stop printing everything */
+
 	nl_sock_init(c, false);
 	if (!v6_only)
 		c->ifi4 = conf_ip4(ifi4, &c->ip4, c->mac);
diff --git a/log.c b/log.c
index aaf2beb..05b7f80 100644
--- a/log.c
+++ b/log.c
@@ -30,12 +30,9 @@
 #include "util.h"
 #include "passt.h"
 
-/* LOG_EARLY means we don't know yet: log everything. LOG_EMERG is unused */
-#define LOG_EARLY		LOG_MASK(LOG_EMERG)
-
 static int	log_sock = -1;		/* Optional socket to system logger */
 static char	log_ident[BUFSIZ];	/* Identifier string for openlog() */
-static int	log_mask = LOG_EARLY;	/* Current log priority mask */
+static int	log_mask;		/* Current log priority mask */
 static int	log_opt;		/* Options for openlog() */
 
 static int	log_file = -1;		/* Optional log file descriptor */
@@ -45,12 +42,13 @@ static size_t	log_cut_size;		/* Bytes to cut at start on rotation */
 static char	log_header[BUFSIZ];	/* File header, written back on cuts */
 
 static time_t	log_start;		/* Start timestamp */
+
 int		log_trace;		/* --trace mode enabled */
+bool		log_conf_parsed;	/* Logging options already parsed */
 
 void vlogmsg(int pri, const char *format, va_list ap)
 {
 	bool debug_print = (log_mask & LOG_MASK(LOG_DEBUG)) && log_file == -1;
-	bool early_print = LOG_PRI(log_mask) == LOG_EARLY;
 	struct timespec tp;
 
 	if (debug_print) {
@@ -60,7 +58,7 @@ void vlogmsg(int pri, const char *format, va_list ap)
 			(long long int)tp.tv_nsec / (100L * 1000));
 	}
 
-	if ((log_mask & LOG_MASK(LOG_PRI(pri))) || early_print) {
+	if ((log_mask & LOG_MASK(LOG_PRI(pri))) || !log_conf_parsed) {
 		va_list ap2;
 
 		va_copy(ap2, ap); /* Don't clobber ap, we need it again */
@@ -72,7 +70,7 @@ void vlogmsg(int pri, const char *format, va_list ap)
 		va_end(ap2);
 	}
 
-	if (debug_print || (early_print && !(log_opt & LOG_PERROR))) {
+	if (debug_print || (!log_conf_parsed && !(log_opt & LOG_PERROR))) {
 		(void)vfprintf(stderr, format, ap);
 		if (format[strlen(format)] != '\n')
 			fprintf(stderr, "\n");
diff --git a/log.h b/log.h
index e0aab5a..3dab284 100644
--- a/log.h
+++ b/log.h
@@ -6,6 +6,7 @@
 #ifndef LOG_H
 #define LOG_H
 
+#include <stdbool.h>
 #include <syslog.h>
 
 #define LOGFILE_SIZE_DEFAULT		(1024 * 1024UL)
@@ -28,6 +29,8 @@ void logmsg(int pri, const char *format, ...)
 	} while (0)
 
 extern int log_trace;
+extern bool log_conf_parsed;
+
 void trace_init(int enable);
 #define trace(...)							\
 	do {								\
-- 
@@ -6,6 +6,7 @@
 #ifndef LOG_H
 #define LOG_H
 
+#include <stdbool.h>
 #include <syslog.h>
 
 #define LOGFILE_SIZE_DEFAULT		(1024 * 1024UL)
@@ -28,6 +29,8 @@ void logmsg(int pri, const char *format, ...)
 	} while (0)
 
 extern int log_trace;
+extern bool log_conf_parsed;
+
 void trace_init(int enable);
 #define trace(...)							\
 	do {								\
-- 
2.43.0


  parent reply	other threads:[~2024-06-20  4:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-20  4:07 [PATCH v4 0/8] Fixes for early logging/prints and related cleanups Stefano Brivio
2024-06-20  4:07 ` [PATCH v4 1/8] conf, passt: Don't try to log to stderr after we close it Stefano Brivio
2024-06-20  4:07 ` [PATCH v4 2/8] conf, passt: Make --stderr do nothing, and deprecate it Stefano Brivio
2024-06-20  4:07 ` Stefano Brivio [this message]
2024-06-20  4:07 ` [PATCH v4 4/8] log, passt: Always print to stderr before initialisation is complete Stefano Brivio
2024-06-20  4:34   ` David Gibson
2024-06-20  4:07 ` [PATCH v4 5/8] log: Add _perror() logging function variants Stefano Brivio
2024-06-20  4:07 ` [PATCH v4 6/8] treewide: Replace perror() calls with calls to logging functions Stefano Brivio
2024-06-20  4:07 ` [PATCH v4 7/8] treewide: Replace strerror() calls Stefano Brivio
2024-06-20  4:08 ` [PATCH v4 8/8] conf, passt: Don't call __openlog() if a log file is used Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240620040800.3065684-4-sbrivio@redhat.com \
    --to=sbrivio@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    --cc=yalzhang@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).