diff options
author | Lucas Werkmeister <mail@lucaswerkmeister.de> | 2017-09-07 23:41:20 +0200 |
---|---|---|
committer | Lucas Werkmeister <mail@lucaswerkmeister.de> | 2017-09-07 23:55:59 +0200 |
commit | ef5a8cb1a7e4529b2b69c4d5a3dcd34e30534f54 (patch) | |
tree | 98802349796c90b6ca448aca19a1846ef99c3b22 | |
parent | 4146ac2a4cba70d2536465bb9b7e99b09558f153 (diff) | |
download | systemd-ef5a8cb1a7e4529b2b69c4d5a3dcd34e30534f54.tar.gz |
analyze: add get-log-level, get-log-target verbs
They’re counterparts to the existing set-log-level and set-log-target
verbs, simply printing the current value to stdout. This makes it
slightly easier to temporarily change the log level and/or target and
then restore the old value(s).
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | man/systemd-analyze.xml | 16 | ||||
-rw-r--r-- | shell-completion/bash/systemd-analyze | 2 | ||||
-rw-r--r-- | shell-completion/zsh/_systemd-analyze | 2 | ||||
-rw-r--r-- | src/analyze/analyze.c | 62 |
5 files changed, 86 insertions, 1 deletions
@@ -11,6 +11,11 @@ CHANGES WITH 235: that case users will be prevented from correctly managing bond0 interface using networkd. + * systemd-analyze gained new verbs "get-log-level" and "get-log-target" + which print the logging level and target of the system manager, + respectively. They complement the existing "set-log-level" and + "set-log-target" verbs, which can be used to change those values. + CHANGES WITH 234: * Meson is now supported as build system in addition to Automake. It is diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml index 91edbfb3b5..a3a3ce0e54 100644 --- a/man/systemd-analyze.xml +++ b/man/systemd-analyze.xml @@ -104,6 +104,16 @@ <cmdsynopsis> <command>systemd-analyze</command> <arg choice="opt" rep="repeat">OPTIONS</arg> + <arg choice="plain">get-log-level</arg> + </cmdsynopsis> + <cmdsynopsis> + <command>systemd-analyze</command> + <arg choice="opt" rep="repeat">OPTIONS</arg> + <arg choice="plain">get-log-target</arg> + </cmdsynopsis> + <cmdsynopsis> + <command>systemd-analyze</command> + <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="plain">syscall-filter</arg> <arg choice="opt"><replaceable>SET</replaceable>…</arg> </cmdsynopsis> @@ -187,6 +197,12 @@ <option>--log-target=</option>, described in <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).</para> + <para><command>systemd-analyze get-log-level</command> + prints the current log level of the <command>systemd</command> daemon.</para> + + <para><command>systemd-analyze get-log-target</command> + prints the current log target of the <command>systemd</command> daemon.</para> + <para><command>systemd-analyze syscall-filter <optional><replaceable>SET</replaceable>…</optional></command> will list system calls contained in the specified system call set <replaceable>SET</replaceable>, or all known sets if no sets are specified. Argument <replaceable>SET</replaceable> must include diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze index 75352a7b3e..8c56a1cf9a 100644 --- a/shell-completion/bash/systemd-analyze +++ b/shell-completion/bash/systemd-analyze @@ -40,7 +40,7 @@ _systemd_analyze() { ) local -A VERBS=( - [STANDALONE]='time blame plot dump' + [STANDALONE]='time blame plot dump get-log-level get-log-target' [CRITICAL_CHAIN]='critical-chain' [DOT]='dot' [LOG_LEVEL]='set-log-level' diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze index 3f091e326a..22b4c181a1 100644 --- a/shell-completion/zsh/_systemd-analyze +++ b/shell-completion/zsh/_systemd-analyze @@ -28,6 +28,8 @@ _systemd_analyze_command(){ 'dump:Dump server status' 'set-log-level:Set systemd log threshold' 'set-log-target:Set systemd log target' + 'get-log-level:Get systemd log threshold' + 'get-log-target:Get systemd log target' 'syscall-filter:List syscalls in seccomp filter' 'verify:Check unit files for correctness' ) diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index 1eb2ca0ccf..a6a36a3d2e 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -1253,6 +1253,34 @@ static int set_log_level(sd_bus *bus, char **args) { return 0; } +static int get_log_level(sd_bus *bus, char **args) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + int r; + _cleanup_free_ char *level = NULL; + + assert(bus); + assert(args); + + if (!strv_isempty(args)) { + log_error("Too many arguments."); + return -E2BIG; + } + + r = sd_bus_get_property_string( + bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "LogLevel", + &error, + &level); + if (r < 0) + return log_error_errno(r, "Failed to get log level: %s", bus_error_message(&error, r)); + + puts(level); + return 0; +} + static int set_log_target(sd_bus *bus, char **args) { _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; int r; @@ -1280,6 +1308,34 @@ static int set_log_target(sd_bus *bus, char **args) { return 0; } +static int get_log_target(sd_bus *bus, char **args) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + int r; + _cleanup_free_ char *target = NULL; + + assert(bus); + assert(args); + + if (!strv_isempty(args)) { + log_error("Too many arguments."); + return -E2BIG; + } + + r = sd_bus_get_property_string( + bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "LogTarget", + &error, + &target); + if (r < 0) + return log_error_errno(r, "Failed to get log target: %s", bus_error_message(&error, r)); + + puts(target); + return 0; +} + #ifdef HAVE_SECCOMP static void dump_syscall_filter(const SyscallFilterSet *set) { const char *syscall; @@ -1365,6 +1421,8 @@ static void help(void) { " dot Output dependency graph in man:dot(1) format\n" " set-log-level LEVEL Set logging threshold for manager\n" " set-log-target TARGET Set logging target for manager\n" + " get-log-level Get logging threshold for manager\n" + " get-log-target Get logging target for manager\n" " dump Output state serialization of service manager\n" " syscall-filter [NAME...] Print list of syscalls in seccomp filter\n" " verify FILE... Check unit files for correctness\n" @@ -1532,8 +1590,12 @@ int main(int argc, char *argv[]) { r = dump(bus, argv+optind+1); else if (streq(argv[optind], "set-log-level")) r = set_log_level(bus, argv+optind+1); + else if (streq(argv[optind], "get-log-level")) + r = get_log_level(bus, argv+optind+1); else if (streq(argv[optind], "set-log-target")) r = set_log_target(bus, argv+optind+1); + else if (streq(argv[optind], "get-log-target")) + r = get_log_target(bus, argv+optind+1); else if (streq(argv[optind], "syscall-filter")) r = dump_syscall_filters(argv+optind+1); else |