From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 31D4845BB9; Thu, 24 Oct 2024 05:21:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 67B9343394; Thu, 24 Oct 2024 05:20:57 +0200 (CEST) Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by mails.dpdk.org (Postfix) with ESMTP id AC6314336F for ; Thu, 24 Oct 2024 05:20:46 +0200 (CEST) Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-7ea9739647bso282001a12.0 for ; Wed, 23 Oct 2024 20:20:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1729740046; x=1730344846; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=F7HJvoe7LKFLZE8nhcknv54w+Jz0vtbZ8SbaC/JSDVw=; b=QkKKFdUcrTB+ybFHMEGHNT217DXddGIqIsll7UJREkixe96vr6HF9/8UAWcoR/wd5l MzJzZEi7mtn3R4l7owxNC+H32srvd/RssMMbyNmd3leLOX/qetRj3lXoLjqLts9RFaf0 RlL0AInqYDpj7BUrVT6wOwG8eztg7ImuCvnW8KQrFlInX831tvzpvLKiPzAIhn8qkNOx ccCpPr9YlUV0lKVy3nYGeqKDTRqPJrQJsZSsoMRGKY3v/4KUJnvZaLsnAwvoK7kwpoe8 arfgBUcFujwYyYSvBNDISAm+xmCwjIMMQuU0USJ7fNkqjamUJ2swmXuwDlTZiwX8qTEh fAnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729740046; x=1730344846; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=F7HJvoe7LKFLZE8nhcknv54w+Jz0vtbZ8SbaC/JSDVw=; b=V65iGXBb1Z0PCKfOgNBLURrXJl+VqCB5a1vs+bnkhxWWCrJsDuGc+353SzEDAgCWzR N7PCnSNsa1w6IZVZw5SdvPzmIId6AAcYBzeNdRJKJcufJYHOMXMsdSbHyL75D/OU54ek eL1LS++dy44tmlmRgEKiwHXW9f+vQLTi4y0U4YgiTkh4TeeffKo2JLa17DGhvTL+h/6f CFf3qtPFNGdTifC6HTog5+VfL5Mwi3xDkkh6HR8hCg7VYdO06R+0me21JNaM3aUxu59C tHJivuGJAzWfsdB5MGn36Y8CLcNAAT4jk+v2CUaRllaTk8CvB0znhiJAq50hePqNz1nB 6c6g== X-Gm-Message-State: AOJu0YwysHFHijluIEHNH6q9XwlYAc5L8sYy0DZ+XH45eYyBhey2Hz/B +0tw6RRV07vB3hle5Avnbxb2XeQPJwlnKC8x1/O/6o/Uvg1o0s/utz2rrl9mrpIuqoVbHzKBxvS b X-Google-Smtp-Source: AGHT+IGHWaiN4mGcFungUnqbk5+6M7FzsYWT8sr4v8LPjeFrpBh/DeWS97jBplZqyK6BoiMwU3gheg== X-Received: by 2002:a05:6a21:164a:b0:1d9:3456:b799 with SMTP id adf61e73a8af0-1d989d03fefmr487447637.46.1729740045668; Wed, 23 Oct 2024 20:20:45 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71ec1324d41sm6999533b3a.57.2024.10.23.20.20.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Oct 2024 20:20:45 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Tyler Retzlaff Subject: [PATCH v27 10/14] log: modify syslog handling Date: Wed, 23 Oct 2024 20:18:48 -0700 Message-ID: <20241024032026.415122-11-stephen@networkplumber.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241024032026.415122-1-stephen@networkplumber.org> References: <20200814173441.23086-1-stephen@networkplumber.org> <20241024032026.415122-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Log to syslog only if option is specified. If no --syslog is given then use console only. Signed-off-by: Stephen Hemminger --- app/test/test_eal_flags.c | 16 +++---- doc/guides/linux_gsg/linux_eal_parameters.rst | 27 ------------ doc/guides/prog_guide/log_lib.rst | 5 +-- lib/eal/common/eal_common_options.c | 4 +- lib/log/log.c | 43 +++++++++---------- lib/log/log_freebsd.c | 11 ----- lib/log/log_internal.h | 6 --- lib/log/log_private.h | 10 +++++ lib/log/log_syslog.c | 21 ++++----- lib/log/log_windows.c | 22 ---------- lib/log/version.map | 3 +- 11 files changed, 51 insertions(+), 117 deletions(-) delete mode 100644 lib/log/log_freebsd.c create mode 100644 lib/log/log_private.h delete mode 100644 lib/log/log_windows.c diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c index 71d8dba731..9fcf0d56e6 100644 --- a/app/test/test_eal_flags.c +++ b/app/test/test_eal_flags.c @@ -985,12 +985,12 @@ test_misc_flags(void) /* With -v */ const char *argv2[] = {prgname, prefix, mp_flag, "-v"}; /* With valid --syslog */ - const char *argv3[] = {prgname, prefix, mp_flag, - "--syslog", "syslog"}; - /* With empty --syslog (should fail) */ + const char *argv3[] = {prgname, prefix, mp_flag, "--syslog=user"}; + /* With empty --syslog (now defaults) */ const char *argv4[] = {prgname, prefix, mp_flag, "--syslog"}; /* With invalid --syslog */ - const char *argv5[] = {prgname, prefix, mp_flag, "--syslog", "error"}; + const char *argv5[] = {prgname, prefix, mp_flag, "--syslog=invalid"}; + /* With no-sh-conf, also use no-huge to ensure this test runs on BSD */ const char *argv6[] = {prgname, "-m", DEFAULT_MEM_SIZE, no_shconf, nosh_prefix, no_huge}; @@ -1080,15 +1080,15 @@ test_misc_flags(void) #endif if (launch_proc(argv3) != 0) { - printf("Error - process did not run ok with --syslog flag\n"); + printf("Error - process did not run ok with --syslog=user flag\n"); goto fail; } - if (launch_proc(argv4) == 0) { - printf("Error - process run ok with empty --syslog flag\n"); + if (launch_proc(argv4) != 0) { + printf("Error - process did not run ok with --syslog flag\n"); goto fail; } if (launch_proc(argv5) == 0) { - printf("Error - process run ok with invalid --syslog flag\n"); + printf("Error - process run ok with --syslog=invalid flag\n"); goto fail; } if (launch_proc(argv7) != 0) { diff --git a/doc/guides/linux_gsg/linux_eal_parameters.rst b/doc/guides/linux_gsg/linux_eal_parameters.rst index ea8f381391..d86f94d8a8 100644 --- a/doc/guides/linux_gsg/linux_eal_parameters.rst +++ b/doc/guides/linux_gsg/linux_eal_parameters.rst @@ -108,30 +108,3 @@ Memory-related options * ``--match-allocations`` Free hugepages back to system exactly as they were originally allocated. - -Other options -~~~~~~~~~~~~~ - -* ``--syslog `` - - Set syslog facility. Valid syslog facilities are:: - - auth - cron - daemon - ftp - kern - lpr - mail - news - syslog - user - uucp - local0 - local1 - local2 - local3 - local4 - local5 - local6 - local7 diff --git a/doc/guides/prog_guide/log_lib.rst b/doc/guides/prog_guide/log_lib.rst index ff9d1b54a2..c87830ac00 100644 --- a/doc/guides/prog_guide/log_lib.rst +++ b/doc/guides/prog_guide/log_lib.rst @@ -5,9 +5,7 @@ Log Library =========== The DPDK Log library provides the logging functionality for other DPDK libraries and drivers. -By default, in a Linux application, logs are sent to syslog and also to the console. -On FreeBSD and Windows applications, logs are sent only to the console. -However, the log function can be overridden by the user to use a different logging mechanism. +The messages can be sent to one or more sources controlled by the EAL command line options. Log Levels ---------- @@ -59,6 +57,7 @@ For example:: Within an application, the same result can be got using the ``rte_log_set_level_pattern()`` or ``rte_log_set_level_regex()`` APIs. + Using Logging APIs to Generate Log Messages ------------------------------------------- diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c index 71c672e93e..ca7b702e03 100644 --- a/lib/eal/common/eal_common_options.c +++ b/lib/eal/common/eal_common_options.c @@ -91,7 +91,7 @@ eal_long_options[] = { {OPT_SOCKET_MEM, 1, NULL, OPT_SOCKET_MEM_NUM }, {OPT_SOCKET_LIMIT, 1, NULL, OPT_SOCKET_LIMIT_NUM }, #ifndef RTE_EXEC_ENV_WINDOWS - {OPT_SYSLOG, 1, NULL, OPT_SYSLOG_NUM }, + {OPT_SYSLOG, 2, NULL, OPT_SYSLOG_NUM }, #endif {OPT_VDEV, 1, NULL, OPT_VDEV_NUM }, {OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM }, @@ -2209,7 +2209,7 @@ eal_common_usage(void) " --"OPT_VMWARE_TSC_MAP" Use VMware TSC map instead of native RDTSC\n" " --"OPT_PROC_TYPE" Type of this process (primary|secondary|auto)\n" #ifndef RTE_EXEC_ENV_WINDOWS - " --"OPT_SYSLOG" Set syslog facility\n" + " --"OPT_SYSLOG"[=] Enable use of syslog\n" #endif " --"OPT_LOG_LEVEL"= Set global log level\n" " --"OPT_LOG_LEVEL"=:\n" diff --git a/lib/log/log.c b/lib/log/log.c index 152aa634c7..b863a0b6bc 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -12,15 +12,18 @@ #include #include #include +#include #include #include #include + #ifdef RTE_EXEC_ENV_WINDOWS #include #endif #include "log_internal.h" +#include "log_private.h" struct rte_log_dynamic_type { const char *name; @@ -61,9 +64,6 @@ TAILQ_HEAD(rte_eal_opt_loglevel_list, rte_eal_opt_loglevel); static struct rte_eal_opt_loglevel_list opt_loglevel_list = TAILQ_HEAD_INITIALIZER(opt_loglevel_list); -/* Stream to use for logging if rte_logs.file is NULL */ -static FILE *default_log_stream; - /** * This global structure stores some information about the message * that is currently being processed by one lcore @@ -76,8 +76,6 @@ struct log_cur_msg { /* per core log */ static RTE_DEFINE_PER_LCORE(struct log_cur_msg, log_cur_msg); -/* default logs */ - /* Change the stream that will be used by logging system */ int rte_openlog_stream(FILE *f) @@ -92,17 +90,7 @@ rte_log_get_stream(void) { FILE *f = rte_logs.file; - if (f == NULL) { - /* - * Grab the current value of stderr here, rather than - * just initializing default_log_stream to stderr. This - * ensures that we will always use the current value - * of stderr, even if the application closes and - * reopens it. - */ - return default_log_stream != NULL ? default_log_stream : stderr; - } - return f; + return (f == NULL) ? stderr : f; } /* Set global log level */ @@ -513,12 +501,18 @@ rte_log(uint32_t level, uint32_t logtype, const char *format, ...) } /* - * Called by environment-specific initialization functions. + * Called by rte_eal_init */ void -eal_log_set_default(FILE *default_log) +eal_log_init(const char *id) { - default_log_stream = default_log; +#ifndef RTE_EXEC_ENV_WINDOWS + FILE *logf; + + logf = log_syslog_open(id); + if (logf) + rte_openlog_stream(logf); +#endif #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG RTE_LOG(NOTICE, EAL, @@ -532,8 +526,11 @@ eal_log_set_default(FILE *default_log) void rte_eal_log_cleanup(void) { - if (default_log_stream) { - fclose(default_log_stream); - default_log_stream = NULL; - } + FILE *log_stream = rte_logs.file; + + /* don't close stderr on the application */ + if (log_stream != NULL) + fclose(log_stream); + + rte_logs.file = NULL; } diff --git a/lib/log/log_freebsd.c b/lib/log/log_freebsd.c deleted file mode 100644 index 33a0925c43..0000000000 --- a/lib/log/log_freebsd.c +++ /dev/null @@ -1,11 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2023 Intel Corporation - */ - -#include -#include "log_internal.h" - -void -eal_log_init(__rte_unused const char *id) -{ -} diff --git a/lib/log/log_internal.h b/lib/log/log_internal.h index d5fabd7ef7..3c46328e7b 100644 --- a/lib/log/log_internal.h +++ b/lib/log/log_internal.h @@ -16,12 +16,6 @@ __rte_internal void eal_log_init(const char *id); -/* - * Determine where log data is written when no call to rte_openlog_stream. - */ -__rte_internal -void eal_log_set_default(FILE *default_log); - /* * Save a log option for later. */ diff --git a/lib/log/log_private.h b/lib/log/log_private.h new file mode 100644 index 0000000000..43e7ff7b01 --- /dev/null +++ b/lib/log/log_private.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef LOG_PRIVATE_H +#define LOG_PRIVATE_H + +#ifndef RTE_EXEC_ENV_WINDOWS +FILE *log_syslog_open(const char *id); +#endif + +#endif /* LOG_PRIVATE_H */ diff --git a/lib/log/log_syslog.c b/lib/log/log_syslog.c index ce34fa4f22..4a05835068 100644 --- a/lib/log/log_syslog.c +++ b/lib/log/log_syslog.c @@ -5,12 +5,16 @@ #include #include #include +#include +#include +#include #include #include #include #include "log_internal.h" +#include "log_private.h" static int log_facility = LOG_DAEMON; @@ -77,20 +81,11 @@ static cookie_io_functions_t log_syslog_func = { .close = log_syslog_close, }; -/* - * set the log to default function, called during eal init process, - * once memzones are available. - */ -void -eal_log_init(const char *id) +FILE * +log_syslog_open(const char *id) { - FILE *log_stream; - openlog(id, LOG_NDELAY | LOG_PID | LOG_PERROR, log_facility); - log_stream = fopencookie(NULL, "w+", log_syslog_func); - if (log_stream != NULL) - eal_log_set_default(log_stream); - else - eal_log_set_default(stderr); + /* redirect other log messages to syslog as well */ + return fopencookie(NULL, "w", log_syslog_func); } diff --git a/lib/log/log_windows.c b/lib/log/log_windows.c deleted file mode 100644 index d7c30e4cfa..0000000000 --- a/lib/log/log_windows.c +++ /dev/null @@ -1,22 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2017-2018 Intel Corporation - */ - -#include -#include -#include "log_internal.h" - -int -eal_log_syslog(const char *name __rte_unused) -{ - return -1; /* not used */ -} - -/* set the log to default function, called during eal init process. */ -void -eal_log_init(__rte_unused const char *id) -{ - rte_openlog_stream(stderr); - - eal_log_set_default(stderr); -} diff --git a/lib/log/version.map b/lib/log/version.map index 879567ba15..1637fba3b9 100644 --- a/lib/log/version.map +++ b/lib/log/version.map @@ -29,7 +29,6 @@ INTERNAL { eal_log_level2str; eal_log_save_pattern; eal_log_save_regexp; - eal_log_set_default; - eal_log_syslog; + eal_log_syslog; # WINDOWS_NO_EXPORT rte_eal_log_cleanup; }; -- 2.45.2