From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id 3AC5A5A004F for ; Wed, 19 Jun 2024 04:12:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1718763116; bh=VcwnwhUKqjhU7Sgnr39uT4jBPmqG/J0T24F1uuAzgRM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=V3y15oO71b695l4gV/2l+8T22BWutq4HbBBiv/Kclzvcr5YmO6t3ZvKAuXBxEi7V8 TxwW8+H3bQMMQD+XYg5J6GQdZsgE9Z1HmYc+5Ut7D5QDVPw8tjF7zgpjPgDWT1L9jk qSQ6JS/hZNmGKnbE4R7heD/VVgdQm6jbJbYrToEZp1rz5poNFOVZyr3k9xqqRggjRj fXMIxWvEfOVmLyciMD0lH1wOfPRnsucG5FVdJijp606Ryj5yK9lBhMwxWNlIYEhjBO qQJDJ89A5rlPkEgMwfXbIpvO+/S82b7M4MFzR2Fn9sbAcsDSUr1WNb6IUbSO3GlM4m TdJlCmFfWi0JQ== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4W3nDr5RVQz4wyg; Wed, 19 Jun 2024 12:11:56 +1000 (AEST) Date: Wed, 19 Jun 2024 12:10:38 +1000 From: David Gibson To: Stefano Brivio Subject: Re: [PATCH 3/6] log, passt: Always print to stderr before initialisation is complete Message-ID: References: <20240617120319.1206857-1-sbrivio@redhat.com> <20240617120319.1206857-4-sbrivio@redhat.com> <20240618080131.0fe3d7be@elisabeth> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="PfF9TNrJu966cc0O" Content-Disposition: inline In-Reply-To: <20240618080131.0fe3d7be@elisabeth> Message-ID-Hash: E6FYN2H3FRVDW6J6SWY7ZEUQPCIELU7U X-Message-ID-Hash: E6FYN2H3FRVDW6J6SWY7ZEUQPCIELU7U X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top, Yalan Zhang X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --PfF9TNrJu966cc0O Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jun 18, 2024 at 08:01:31AM +0200, Stefano Brivio wrote: > On Tue, 18 Jun 2024 10:44:20 +1000 > David Gibson wrote: >=20 > > On Mon, Jun 17, 2024 at 02:03:16PM +0200, Stefano Brivio wrote: > > > After commit 15001b39ef1d ("conf: set the log level much earlier"), we > > > had a phase during initialisation when messages wouldn't be printed to > > > standard error anymore. > > >=20 > > > Commit f67238aa864d ("passt, log: Call __openlog() earlier, log to > > > stderr until we detach") fixed that, but only for the case where no > > > log files are given. > > >=20 > > > If a log file is configured, vlogmsg() will not call passt_vsyslog(), > > > but during initialisation, LOG_PERROR is set, so to avoid duplicated > > > prints (which would result from passt_vsyslog() printing to stderr), > > > we don't call fprintf() from vlogmsg() either. > > >=20 > > > This is getting a bit too complicated. Instead of abusing LOG_PERROR, > > > define an internal logging flag that clearly represents that we're not > > > done with the initialisation phase yet. > > >=20 > > > If this flag is not set, make sure we always print to stderr, if the > > > log mask matches. Then, set LOG_PERROR only as we set this internal > > > flag, to make sure we don't duplicate messages. > > >=20 > > > Reported-by: Yalan Zhang > > > Signed-off-by: Stefano Brivio > > > --- > > > log.c | 4 +++- > > > log.h | 1 + > > > passt.1 | 3 ++- > > > passt.c | 17 ++++++++++------- > > > 4 files changed, 16 insertions(+), 9 deletions(-) > > >=20 > > > diff --git a/log.c b/log.c > > > index 3b5a1c6..939bb93 100644 > > > --- a/log.c > > > +++ b/log.c > > > @@ -49,6 +49,7 @@ int log_trace; /* --trace mode enabled */ > > > void vlogmsg(int pri, const char *format, va_list ap) > > > { > > > bool debug_print =3D (log_mask & LOG_MASK(LOG_DEBUG)) && log_file = =3D=3D -1; > > > + bool before_daemon =3D !(log_flags & LOG_FLAG_DAEMON_READY); =20 > >=20 > > As in 2/6 would just a global bool be simpler than flags. > >=20 > > > bool early_print =3D !(log_flags & LOG_FLAG_CONF_PARSED); > > > struct timespec tp; > > > =20 > > > @@ -71,7 +72,8 @@ void vlogmsg(int pri, const char *format, va_list a= p) > > > va_end(ap2); > > > } > > > =20 > > > - if (debug_print || (early_print && !(log_opt & LOG_PERROR))) { > > > + if (debug_print || early_print || > > > + (before_daemon && (log_mask & LOG_MASK(LOG_PRI(pri))))) { > > > (void)vfprintf(stderr, format, ap); > > > if (format[strlen(format)] !=3D '\n') > > > fprintf(stderr, "\n"); > > > diff --git a/log.h b/log.h > > > index 6a3224a..680baab 100644 > > > --- a/log.h > > > +++ b/log.h > > > @@ -10,6 +10,7 @@ > > > #include > > > =20 > > > #define LOG_FLAG_CONF_PARSED BIT(0) /* We already parsed logging opt= ions */ > > > +#define LOG_FLAG_DAEMON_READY BIT(1) /* Daemonised, or ready in fore= ground */ > > > =20 > > > #define LOGFILE_SIZE_DEFAULT (1024 * 1024UL) > > > #define LOGFILE_CUT_RATIO 30 /* When full, cut ~30% size */ > > > diff --git a/passt.1 b/passt.1 > > > index 3a23a43..31e528e 100644 > > > --- a/passt.1 > > > +++ b/passt.1 > > > @@ -99,7 +99,8 @@ terminal, and to both system logger and standard er= ror otherwise. > > > =20 > > > .TP > > > .BR \-l ", " \-\-log-file " " \fIPATH\fR > > > -Log to file \fIPATH\fR, not to standard error, and not to the system= logger. > > > +Log to file \fIPATH\fR, not to standard error (once initialisation i= s complete), > > > +and not to the system logger. =20 > >=20 > > IIUC when -l is set we'll log to the logfile _as well as_ stderr > > before we daemonize. The description above doesn't exactly contradict > > that, but seems to imply something different. >=20 > Is that because "(once initialisation is complete)" doesn't clearly > refer to "not to standard error"? Yes, or rather that it's not entirely clear it refers *only* to that clause and not to the "Log to file" part at the beginning. > I could go with something slightly more verbose: >=20 > Log to file \fIPATH\fR, not to standard error, and not to the system > logger. >=20 > During initialisation phase, that is, before forking to background, > or before being ready for communication when running in foreground, > messages are always printed to standard error as well. Hrm... so I want to say: Log to file PATH instead of to system logger. Which may not be totally accurate for the current behaviour... but seems like it might be a sensible behaviour. That is, we typically log to syslog, but -l replaces it with a logfile. Regardless of which, under some circumstances we'll also log to stderr. --=20 David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson --PfF9TNrJu966cc0O Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmZyPh0ACgkQzQJF27ox 2Gdq7RAAnD0j0GqVvpWPdyUSOFWD1tAy/nyBhVOOfzZbJCePb9nYI/rLG3SnPSpN 2TLb5wwpTdq9C6KPIusnMpBDruPqYGx7c8w6E4+RoeQGPe8nEKqDC0C+M2Qu5ZDi HSZhkKQzmZGEu4BdGis2Cw9K9WWRlEVoJQ4bGITZ2tSvJN3xeSWDNnGv4UWy19Fu W8DFzlUWTTTk1B9MYh22bXVcPj4vcoC8UmMkuC0tfMeiP1nfEwSPotCkcP9XTenA fksQRAEj3uHWRBk1r8EQ9cg4LDQOhLpAE/gosl7tnGFT8eCOyJREQdqIsmNzcjsS K7LihTMJaWAuyR7JSkxBSYd1S3XovvvAE/ko6r9TI8WTdrS8JzxySYUpwko7uG/p RYMN5VHHwWp2hGPNUVBvCSNKNTbpnQcg4gniuy4YnjhaiI0LLsxbr8MHiel1NXjl i4YdW0Urc4ZMEYU0Dtq1VKa6zPcWa1dkl3NREyxsIMVEwO7ezVmGa2+m5XUoC2Az YDqpfGlsO8MReNzPUJ/+3jkrk+DkO+Psm33sm7CSCdvVonJlNjWabqBjk94ixy8q tWEkiOjbqBEwBHSE4kJz3aGum1fXuKewVeW+HstVJNmsYXNFFoNbOhSOKZjTSrX4 s65M7A7Xy7IiFymTMfSZLb9/Tcy1UNNBGwLMLE4xN6yFGeoTm54= =XzmX -----END PGP SIGNATURE----- --PfF9TNrJu966cc0O--