]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
log: introduce log_parse_environment_cli() and log_setup_cli()
authorFilipe Brandenburger <filbranden@gmail.com>
Wed, 17 Jun 2020 19:17:54 +0000 (12:17 -0700)
committerLennart Poettering <lennart@poettering.net>
Wed, 24 Jun 2020 14:49:26 +0000 (16:49 +0200)
Presently, CLI utilities such as systemctl will check whether they have a tty
attached or not to decide whether to parse /proc/cmdline or EFI variable
SystemdOptions looking for systemd.log_* entries.

But this check will be misleading if these tools are being launched by a
daemon, such as a monitoring daemon or automation service that runs in
background.

Make log handling of CLI tools uniform by never checking /proc/cmdline or EFI
variables to determine the logging level.

Furthermore, introduce a new log_setup_cli() shortcut to set up common options
used by most command-line utilities.

27 files changed:
src/analyze/analyze.c
src/basic/log.c
src/basic/log.h
src/busctl/busctl.c
src/cgls/cgls.c
src/cgtop/cgtop.c
src/coredump/coredumpctl.c
src/delta/delta.c
src/detect-virt/detect-virt.c
src/escape/escape.c
src/home/homectl.c
src/hostname/hostnamectl.c
src/id128/id128.c
src/journal-remote/journal-remote-main.c
src/journal-remote/journal-upload.c
src/journal/cat.c
src/journal/journalctl.c
src/locale/localectl.c
src/login/loginctl.c
src/machine/machinectl.c
src/network/networkctl.c
src/portable/portablectl.c
src/resolve/resolvectl.c
src/systemctl/systemctl.c
src/test/test-chase-symlinks.c
src/timedate/timedatectl.c
src/userdb/userdbctl.c

index faf50d2ac315663e9a7ab211a319765220f140c3..a8bd993cbe5f34baa5e0a9f23f098d119854c183 100644 (file)
@@ -2376,9 +2376,7 @@ static int run(int argc, char *argv[]) {
         setlocale(LC_ALL, "");
         setlocale(LC_NUMERIC, "C"); /* we want to format/parse floats in C style */
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 893181b23d65aba23864e9ac77beb22ac1bb1544..c6fe20380830b9e6ff78ac869b392c213798565e 100644 (file)
@@ -1146,16 +1146,20 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
 }
 
 void log_parse_environment_realm(LogRealm realm) {
-        /* Do not call from library code. */
-
-        const char *e;
-
         if (getpid_cached() == 1 || get_ctty_devnr(0, NULL) < 0)
                 /* Only try to read the command line in daemons. We assume that anything that has a
                  * controlling tty is user stuff. For PID1 we do a special check in case it hasn't
                  * closed the console yet. */
                 (void) proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_STRIP_RD_PREFIX);
 
+        log_parse_environment_cli_realm(realm);
+}
+
+void log_parse_environment_cli_realm(LogRealm realm) {
+        /* Do not call from library code. */
+
+        const char *e;
+
         e = getenv("SYSTEMD_LOG_TARGET");
         if (e && log_set_target_from_string(e) < 0)
                 log_warning("Failed to parse log target '%s'. Ignoring.", e);
@@ -1430,3 +1434,11 @@ void log_setup_service(void) {
         log_parse_environment();
         (void) log_open();
 }
+
+void log_setup_cli(void) {
+        /* Sets up logging the way it is most appropriate for running a program as a CLI utility. */
+
+        log_show_color(true);
+        log_parse_environment_cli();
+        (void) log_open();
+}
index 2c1b00fb88f07d0c248e7f9fc015536238457115..15807d3029f95e76e20da8be0526223094e9b4bf 100644 (file)
@@ -84,8 +84,11 @@ void log_close(void);
 void log_forget_fds(void);
 
 void log_parse_environment_realm(LogRealm realm);
+void log_parse_environment_cli_realm(LogRealm realm);
 #define log_parse_environment() \
         log_parse_environment_realm(LOG_REALM)
+#define log_parse_environment_cli() \
+        log_parse_environment_cli_realm(LOG_REALM)
 
 int log_dispatch_internal(
                 int level,
@@ -341,3 +344,4 @@ int log_syntax_invalid_utf8_internal(
 #define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)
 
 void log_setup_service(void);
+void log_setup_cli(void);
index 8e000ee1196b98b0e20ab3dadb04386e441c41bc..3ab90de63e2ae6090987f55dff0f854bb1f98caf 100644 (file)
@@ -2598,9 +2598,7 @@ static int busctl_main(int argc, char *argv[]) {
 static int run(int argc, char *argv[]) {
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index b55d7299cabf03529f44669af5a8d6578d01c6d2..939a391e21cc85edcf17031101ea81aa0da3465a 100644 (file)
@@ -164,9 +164,7 @@ static void show_cg_info(const char *controller, const char *path) {
 static int run(int argc, char *argv[]) {
         int r, output_flags;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index de25aaae5d1db02df04b08a60596ab30e139eb6d..e6c09d1b38bcc193e3b94af10e1c8bcff32c6abc 100644 (file)
@@ -908,9 +908,7 @@ static int run(int argc, char *argv[]) {
         CGroupMask mask;
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index ed4d06e9866dd1e4af044bc99d33e4d3b1b10139..eceb7927afa79333f77f68b664b06791560a171c 100644 (file)
@@ -1091,9 +1091,7 @@ static int run(int argc, char *argv[]) {
         int r, units_active;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
index 2d80d3a664b3871edcb4c190fba3c5f152c8a6e8..29e5120375e22d52c4892ad191dcde9ee5c323eb 100644 (file)
@@ -643,9 +643,7 @@ static int parse_argv(int argc, char *argv[]) {
 static int run(int argc, char *argv[]) {
         int r, k, n_found = 0;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 7fb80ca138abe6d68f97eb1e7506d7fd22c1080b..4f38de8e29fb8315bcae96c45222e9c7402441d6 100644 (file)
@@ -128,9 +128,7 @@ static int run(int argc, char *argv[]) {
          * to detect whether we are being run in a virtualized
          * environment or not */
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 9066c30853bc8bfd682d69c3e2d06a34551febb2..0c543a90f6b7994267f42f28ebe32af9642ff398 100644 (file)
@@ -159,9 +159,7 @@ static int run(int argc, char *argv[]) {
         char **i;
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index f7237d22d83bce46a5a6448f0b48c58670dbb4b2..7a473b791b1df86766917a5949c90174bb49b399 100644 (file)
@@ -3489,9 +3489,7 @@ static int run(int argc, char *argv[]) {
 
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 5596846ed26cd415036fb0657916d2d67d5f9586..e08ab15acd13226fb410694f5e3e2b1cd74e257c 100644 (file)
@@ -436,9 +436,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 19435f80fea40726960b69848872e6dff57741fa..13996573ab6661ef080f2a43eb7bc2228e027763 100644 (file)
@@ -249,9 +249,7 @@ static int id128_main(int argc, char *argv[]) {
 static int run(int argc, char *argv[]) {
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 948b2d2fce60583117021410966d2859aec6a782..69a111afeadc73d0e63bc9de81b40cc135ed1b9c 100644 (file)
@@ -1110,7 +1110,7 @@ static int run(int argc, char **argv) {
         int r;
 
         log_show_color(true);
-        log_parse_environment();
+        log_parse_environment_cli();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
index bd58fdbcdfb7f0ee3263998513776b93a3c1b290..e169a27eb3c7df8440c0a48507510cfbb3a383f5 100644 (file)
@@ -821,7 +821,7 @@ static int run(int argc, char **argv) {
         int r;
 
         log_show_color(true);
-        log_parse_environment();
+        log_parse_environment_cli();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
index 500b6745050f25b7b5524200bd0737d667c61c16..2faaa2e28488d77149b78942125ee0f8a6f3a4ad 100644 (file)
@@ -129,9 +129,7 @@ static int run(int argc, char *argv[]) {
         _cleanup_close_ int outfd = -1, errfd = -1, saved_stderr = -1;
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 859f4bbd44a9b9a26c722b3242b4c9f8f13ffc3f..6ba65a10719a07798ce9f8091563efdf39b7a11c 100644 (file)
@@ -2115,9 +2115,7 @@ int main(int argc, char *argv[]) {
         int n_shown = 0, r, poll_fd = -1;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         /* Increase max number of open files if we can, we might needs this when browsing journal files, which might be
          * split up into many files. */
index b7548a0f7f561c69382f90858a98d30a349400a8..96fc09a5702273728b1059bd7f90970bad69a5d0 100644 (file)
@@ -502,9 +502,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 7805863d8ddfb8f63a074af800516ce9580cedf5..9216224bfc879b6727982d6d1d2e577d1b854a4b 100644 (file)
@@ -1460,9 +1460,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
index d88b2651d2c5118bf57ee7648aa85dac8dad82f3..d8f4526644def61e6d11e70bd331c363c84593ad 100644 (file)
@@ -2882,9 +2882,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         /* The journal merging logic potentially needs a lot of fds. */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
index 8049912f437c9e75c59ab93f589f2859c5ccf075..8b7cf292fa056a0157e82f2b9df67b7119be92d9 100644 (file)
@@ -2818,9 +2818,7 @@ static void warn_networkd_missing(void) {
 static int run(int argc, char* argv[]) {
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 1bde30e90f1ab7b2a1c7bbbe8cf2731b89085f71..01614b6684a98eb662acef602f3c3e377af8188c 100644 (file)
@@ -1119,9 +1119,7 @@ static int run(int argc, char *argv[]) {
 
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 3cadac76395c8b587fa173e64cc5bf71d8e9783c..a80b450bc0e821302324b717ef3db51e489955dc 100644 (file)
@@ -3174,9 +3174,7 @@ static int run(int argc, char **argv) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         if (streq(program_invocation_short_name, "resolvconf"))
                 r = resolvconf_parse_argv(argc, argv);
index ad7400bacc233fc49d4e84821685812a409e558e..681992b7e5508b29dc4f3102a8f83343d3790874 100644 (file)
@@ -9207,7 +9207,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_parse_environment();
+        log_parse_environment_cli();
         log_open();
 
         /* The journal merging logic potentially needs a lot of fds. */
index 0b7dd8764f0d941e40df4c4bcc0b6d636d146932..f7b3dd5e00509b873bd0d397e43eab7211747b41 100644 (file)
@@ -84,9 +84,7 @@ static int parse_argv(int argc, char *argv[]) {
 static int run(int argc, char **argv) {
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 3f34a91a7e1943872721d0aeaa8c9ecae2fff3b2..285eba802bb2a7f0bbe648ef1d43e6c2c5f1c946 100644 (file)
@@ -1052,9 +1052,7 @@ static int run(int argc, char *argv[]) {
         int r;
 
         setlocale(LC_ALL, "");
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
index 4b5eb34ca6225d7a2473bae1029ce217f745e59b..648eacd02341ca122177242ae8bfe333bd1f3469 100644 (file)
@@ -761,9 +761,7 @@ static int run(int argc, char *argv[]) {
 
         int r;
 
-        log_show_color(true);
-        log_parse_environment();
-        log_open();
+        log_setup_cli();
 
         r = parse_argv(argc, argv);
         if (r <= 0)