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: Andrea Bolognani <abologna@redhat.com>
Subject: [PATCH] log: Send identifier string in log messages, openlog() won't work for us
Date: Thu, 23 Feb 2023 18:35:55 +0100	[thread overview]
Message-ID: <20230223173555.3896768-1-sbrivio@redhat.com> (raw)

openlog() can be used to set "ident" and have all the log messages
prefixed by it, but only if we call syslog() -- this is implemented
by C libraries.

We don't log messages with syslog(), though, as we have a custom
implementation to ensure we don't need dynamic memory allocation.
This means that it's perfectly useless to call openlog(), and that we
have to prefix every message we log by the identifier on our own.

Reported-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
 log.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/log.c b/log.c
index f23e8ef..bfde6ce 100644
--- a/log.c
+++ b/log.c
@@ -106,7 +106,7 @@ void trace_init(int enable)
 }
 
 /**
- * __openlog() - Non-optional openlog() wrapper, to allow custom vsyslog()
+ * __openlog() - Non-optional openlog() implementation, for custom vsyslog()
  * @ident:	openlog() identity (program name)
  * @option:	openlog() options
  * @facility:	openlog() facility (LOG_DAEMON)
@@ -136,8 +136,6 @@ void __openlog(const char *ident, int option, int facility)
 	log_mask |= facility;
 	strncpy(log_ident, ident, sizeof(log_ident) - 1);
 	log_opt = option;
-
-	openlog(ident, option, facility);
 }
 
 /**
@@ -158,11 +156,11 @@ void __setlogmask(int mask)
  */
 void passt_vsyslog(int pri, const char *format, va_list ap)
 {
+	int prefix_len, n;
 	char buf[BUFSIZ];
-	int n;
 
-	/* Send without name and timestamp, the system logger should add them */
-	n = snprintf(buf, BUFSIZ, "<%i> ", pri);
+	/* Send without timestamp, the system logger should add it */
+	n = prefix_len = snprintf(buf, BUFSIZ, "<%i> %s: ", pri, log_ident);
 
 	n += vsnprintf(buf + n, BUFSIZ - n, format, ap);
 
@@ -170,7 +168,7 @@ void passt_vsyslog(int pri, const char *format, va_list ap)
 		n += snprintf(buf + n, BUFSIZ - n, "\n");
 
 	if (log_opt & LOG_PERROR)
-		fprintf(stderr, "%s", buf + sizeof("<0>"));
+		fprintf(stderr, "%s", buf + prefix_len);
 
 	if (send(log_sock, buf, n, 0) != n)
 		fprintf(stderr, "Failed to send %i bytes to syslog\n", n);
-- 
@@ -106,7 +106,7 @@ void trace_init(int enable)
 }
 
 /**
- * __openlog() - Non-optional openlog() wrapper, to allow custom vsyslog()
+ * __openlog() - Non-optional openlog() implementation, for custom vsyslog()
  * @ident:	openlog() identity (program name)
  * @option:	openlog() options
  * @facility:	openlog() facility (LOG_DAEMON)
@@ -136,8 +136,6 @@ void __openlog(const char *ident, int option, int facility)
 	log_mask |= facility;
 	strncpy(log_ident, ident, sizeof(log_ident) - 1);
 	log_opt = option;
-
-	openlog(ident, option, facility);
 }
 
 /**
@@ -158,11 +156,11 @@ void __setlogmask(int mask)
  */
 void passt_vsyslog(int pri, const char *format, va_list ap)
 {
+	int prefix_len, n;
 	char buf[BUFSIZ];
-	int n;
 
-	/* Send without name and timestamp, the system logger should add them */
-	n = snprintf(buf, BUFSIZ, "<%i> ", pri);
+	/* Send without timestamp, the system logger should add it */
+	n = prefix_len = snprintf(buf, BUFSIZ, "<%i> %s: ", pri, log_ident);
 
 	n += vsnprintf(buf + n, BUFSIZ - n, format, ap);
 
@@ -170,7 +168,7 @@ void passt_vsyslog(int pri, const char *format, va_list ap)
 		n += snprintf(buf + n, BUFSIZ - n, "\n");
 
 	if (log_opt & LOG_PERROR)
-		fprintf(stderr, "%s", buf + sizeof("<0>"));
+		fprintf(stderr, "%s", buf + prefix_len);
 
 	if (send(log_sock, buf, n, 0) != n)
 		fprintf(stderr, "Failed to send %i bytes to syslog\n", n);
-- 
2.39.1


             reply	other threads:[~2023-02-23 17:35 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-23 17:35 Stefano Brivio [this message]
2023-02-23 18:15 ` [PATCH] log: Send identifier string in log messages, openlog() won't work for us Andrea Bolognani
2023-02-24  6:59   ` Stefano Brivio
2023-02-24 19:44     ` Andrea Bolognani
2023-02-23 23:31 ` David Gibson

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=20230223173555.3896768-1-sbrivio@redhat.com \
    --to=sbrivio@redhat.com \
    --cc=abologna@redhat.com \
    --cc=passt-dev@passt.top \
    /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).