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>
Subject: [PATCH 2/6] conf, log: Introduce internal log flags, instead of abusing log levels
Date: Mon, 17 Jun 2024 14:03:15 +0200	[thread overview]
Message-ID: <20240617120319.1206857-3-sbrivio@redhat.com> (raw)
In-Reply-To: <20240617120319.1206857-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 internal log flags to represent them, instead of abusing
log priorities.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
 conf.c |  5 ++---
 log.c  | 18 +++++++++++++-----
 log.h  |  4 ++++
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/conf.c b/conf.c
index dbdbb62..0b76da9 100644
--- a/conf.c
+++ b/conf.c
@@ -1701,9 +1701,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)
@@ -1711,6 +1708,8 @@ void conf(struct ctx *c, int argc, char **argv)
 	else
 		__setlogmask(LOG_UPTO(LOG_INFO));
 
+	log_set_flag(LOG_FLAG_CONF_PARSED);	/* 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..3b5a1c6 100644
--- a/log.c
+++ b/log.c
@@ -30,14 +30,13 @@
 #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 uint8_t	log_flags;		/* Internal, see LOG_FLAG_* in log.h */
+
 static int	log_file = -1;		/* Optional log file descriptor */
 static size_t	log_size;		/* Maximum log file size in bytes */
 static size_t	log_written;		/* Currently used bytes in log file */
@@ -50,7 +49,7 @@ int		log_trace;		/* --trace mode enabled */
 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;
+	bool early_print = !(log_flags & LOG_FLAG_CONF_PARSED);
 	struct timespec tp;
 
 	if (debug_print) {
@@ -150,6 +149,15 @@ void __setlogmask(int mask)
 	setlogmask(mask);
 }
 
+/**
+ * log_set_flag() - Set an internal log flag
+ * @flag:	Flag as defined by LOG_FLAG_* in log.h
+ */
+void log_set_flag(uint8_t flag)
+{
+	log_flags |= flag;
+}
+
 /**
  * passt_vsyslog() - vsyslog() implementation not using heap memory
  * @pri:	Facility and level map, same as priority for vsyslog()
diff --git a/log.h b/log.h
index e0aab5a..6a3224a 100644
--- a/log.h
+++ b/log.h
@@ -6,8 +6,11 @@
 #ifndef LOG_H
 #define LOG_H
 
+#include <stdint.h>
 #include <syslog.h>
 
+#define LOG_FLAG_CONF_PARSED	BIT(0)	/* We already parsed logging options */
+
 #define LOGFILE_SIZE_DEFAULT		(1024 * 1024UL)
 #define LOGFILE_CUT_RATIO		30	/* When full, cut ~30% size */
 #define LOGFILE_SIZE_MIN		(5UL * MAX(BUFSIZ, PAGE_SIZE))
@@ -40,5 +43,6 @@ void logfile_init(const char *name, const char *path, size_t size);
 void passt_vsyslog(int pri, const char *format, va_list ap);
 void logfile_write(int pri, const char *format, va_list ap);
 void __setlogmask(int mask);
+void log_set_flag(uint8_t flag);
 
 #endif /* LOG_H */
-- 
@@ -6,8 +6,11 @@
 #ifndef LOG_H
 #define LOG_H
 
+#include <stdint.h>
 #include <syslog.h>
 
+#define LOG_FLAG_CONF_PARSED	BIT(0)	/* We already parsed logging options */
+
 #define LOGFILE_SIZE_DEFAULT		(1024 * 1024UL)
 #define LOGFILE_CUT_RATIO		30	/* When full, cut ~30% size */
 #define LOGFILE_SIZE_MIN		(5UL * MAX(BUFSIZ, PAGE_SIZE))
@@ -40,5 +43,6 @@ void logfile_init(const char *name, const char *path, size_t size);
 void passt_vsyslog(int pri, const char *format, va_list ap);
 void logfile_write(int pri, const char *format, va_list ap);
 void __setlogmask(int mask);
+void log_set_flag(uint8_t flag);
 
 #endif /* LOG_H */
-- 
2.43.0


  parent reply	other threads:[~2024-06-17 12:03 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-17 12:03 [PATCH 0/6] Fixes for early logging/prints and related cleanups Stefano Brivio
2024-06-17 12:03 ` [PATCH 1/6] conf, passt: Don't try to log to stderr after we close it Stefano Brivio
2024-06-18  0:36   ` David Gibson
2024-06-18  6:00     ` Stefano Brivio
2024-06-19  2:06       ` David Gibson
2024-06-19  8:13         ` Stefano Brivio
2024-06-20  0:12           ` David Gibson
2024-06-17 12:03 ` Stefano Brivio [this message]
2024-06-18  0:39   ` [PATCH 2/6] conf, log: Introduce internal log flags, instead of abusing log levels David Gibson
2024-06-18  6:01     ` Stefano Brivio
2024-06-17 12:03 ` [PATCH 3/6] log, passt: Always print to stderr before initialisation is complete Stefano Brivio
2024-06-18  0:44   ` David Gibson
2024-06-18  6:01     ` Stefano Brivio
2024-06-19  2:10       ` David Gibson
2024-06-19  8:17         ` Stefano Brivio
2024-06-20  0:12           ` David Gibson
2024-06-17 12:03 ` [PATCH 4/6] log: Add _perror() logging function variants Stefano Brivio
2024-06-18  0:46   ` David Gibson
2024-06-18  6:02     ` Stefano Brivio
2024-06-19  2:11       ` David Gibson
2024-06-19  8:25         ` Stefano Brivio
2024-06-20  0:13           ` David Gibson
2024-06-17 12:03 ` [PATCH 5/6] treewide: Replace perror() calls with calls to logging functions Stefano Brivio
2024-06-18  0:50   ` David Gibson
2024-06-17 12:03 ` [PATCH 6/6] treewide: Replace strerror() calls Stefano Brivio
2024-06-18  0:51   ` David Gibson
2024-06-18  6:02     ` 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=20240617120319.1206857-3-sbrivio@redhat.com \
    --to=sbrivio@redhat.com \
    --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).