From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTP id EA6AB5A004F for ; Tue, 18 Jun 2024 08:02:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718690530; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nQOvvXGB5HQB9MMZuyKXpn4rNktcZGPAwYyBj7N1HSQ=; b=bo5ndkvIXoqVVAXZrl6oHYE0/nZwLEVlZoUK+zQP7mSiY42iDDJfjQ8SGY28QVdeXaYwj9 0iJdv8jZ7YTyquStQpTJWxQEfFKuzzQl4jOt+iaRNy+ZG9s+m7GqTO50pNVdJfFtEoWsXU uPJuFN1Azr1TNhAN5zaA0t7rLZNYw0Y= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-688-wtVsgtNVNQiFDCLTB_Z5KA-1; Tue, 18 Jun 2024 02:02:09 -0400 X-MC-Unique: wtVsgtNVNQiFDCLTB_Z5KA-1 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-6b07ef34bfcso106880416d6.1 for ; Mon, 17 Jun 2024 23:02:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718690529; x=1719295329; h=content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=nQOvvXGB5HQB9MMZuyKXpn4rNktcZGPAwYyBj7N1HSQ=; b=f4lWH569E1oRA3r99IzrwT4vNqfpKzjUJnbIs1oGkpolDNm+S7x+c7RS7YF24NRjmE C9bf6IFSBxseimQ2M55YvPScmTuSZD4Om8tw8+uxeena6W1YCYx6RFm/fGaIVk4yJJGu A/wKFVa/KdEiZJd8+FI+CasTB6qKQF7jPOseFf6jbqXyrJaQr1fMWrcQsNQcStnXvkXZ Ct9s2jfymrkT4NPzQ8VDVoC/902AfihcczX0r9dyWLOSL1DVQRrNW6UQd+l03N6Pk0l/ 1SZrg7PJxHkRuwaS90IdpWs2r2d41X1sXxC66Vp4d44LZdJYFPbH4WY/87x/nFv5WVlY tp2Q== X-Gm-Message-State: AOJu0YxWdqOVb5n9dORogiLR+SlnGqp/4dviM3uaT8QcV9Vric6NXLr6 y6vY36TGPSNp9iK3gDP0kN7bA1LBQSTl7jPVKwC12+VN4I2EqKizaDaJCHvsJbB0+UF4nRuRem9 mjP7ef1tJ5FyboljWLpzq+Je2MuDzp7gDB9iRXlMPwU2W9Nrcag== X-Received: by 2002:ad4:57c3:0:b0:6b0:4cc0:2168 with SMTP id 6a1803df08f44-6b2e234e367mr25483256d6.30.1718690528582; Mon, 17 Jun 2024 23:02:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE98p3fK9WU+WiFmiQwSjWeTRwpNX17oThzdlZkHQMyAWTIFSX72Jp7It1XNp9NIbq+pf4Qwg== X-Received: by 2002:ad4:57c3:0:b0:6b0:4cc0:2168 with SMTP id 6a1803df08f44-6b2e234e367mr25482966d6.30.1718690528076; Mon, 17 Jun 2024 23:02:08 -0700 (PDT) Received: from maya.cloud.tilaa.com (maya.cloud.tilaa.com. [164.138.29.33]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b2a5eb4cf9sm63388076d6.97.2024.06.17.23.02.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Jun 2024 23:02:07 -0700 (PDT) Date: Tue, 18 Jun 2024 08:01:31 +0200 From: Stefano Brivio To: David Gibson Subject: Re: [PATCH 3/6] log, passt: Always print to stderr before initialisation is complete Message-ID: <20240618080131.0fe3d7be@elisabeth> In-Reply-To: References: <20240617120319.1206857-1-sbrivio@redhat.com> <20240617120319.1206857-4-sbrivio@redhat.com> Organization: Red Hat X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-ID-Hash: YILP2N2NLJEXQUQFCXSYCUSQC5ZKXTU5 X-Message-ID-Hash: YILP2N2NLJEXQUQFCXSYCUSQC5ZKXTU5 X-MailFrom: sbrivio@redhat.com 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: On Tue, 18 Jun 2024 10:44:20 +1000 David Gibson wrote: > 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. > > > > 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. > > > > 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. > > > > 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. > > > > 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. > > > > 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(-) > > > > 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 = (log_mask & LOG_MASK(LOG_DEBUG)) && log_file == -1; > > + bool before_daemon = !(log_flags & LOG_FLAG_DAEMON_READY); > > As in 2/6 would just a global bool be simpler than flags. > > > bool early_print = !(log_flags & LOG_FLAG_CONF_PARSED); > > struct timespec tp; > > > > @@ -71,7 +72,8 @@ 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 || early_print || > > + (before_daemon && (log_mask & LOG_MASK(LOG_PRI(pri))))) { > > (void)vfprintf(stderr, format, ap); > > if (format[strlen(format)] != '\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 > > > > #define LOG_FLAG_CONF_PARSED BIT(0) /* We already parsed logging options */ > > +#define LOG_FLAG_DAEMON_READY BIT(1) /* Daemonised, or ready in foreground */ > > > > #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 error otherwise. > > > > .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 is complete), > > +and not to the system logger. > > 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. Is that because "(once initialisation is complete)" doesn't clearly refer to "not to standard error"? I could go with something slightly more verbose: Log to file \fIPATH\fR, not to standard error, and not to the system logger. 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. -- Stefano