summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Werkmeister <mail@lucaswerkmeister.de>2017-09-07 23:41:20 +0200
committerLucas Werkmeister <mail@lucaswerkmeister.de>2017-09-07 23:55:59 +0200
commitef5a8cb1a7e4529b2b69c4d5a3dcd34e30534f54 (patch)
tree98802349796c90b6ca448aca19a1846ef99c3b22
parent4146ac2a4cba70d2536465bb9b7e99b09558f153 (diff)
downloadsystemd-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--NEWS5
-rw-r--r--man/systemd-analyze.xml16
-rw-r--r--shell-completion/bash/systemd-analyze2
-rw-r--r--shell-completion/zsh/_systemd-analyze2
-rw-r--r--src/analyze/analyze.c62
5 files changed, 86 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index f843c35c4f..4940902451 100644
--- a/NEWS
+++ b/NEWS
@@ -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