diff --git a/TODO b/TODO
index 5294b74d30..35ce46ff40 100644
--- a/TODO
+++ b/TODO
@@ -51,6 +51,8 @@ CGroup Rework Completion:
Features:
+* remove systemctl load-unit
+
* journalctl: instead --after-cursor= maybe have a --cursor=XYZ+1 syntax?
* given that logind/machined now let PID 1 do all nasty work we can
@@ -88,8 +90,6 @@ Features:
* load .d/*.conf dropins for device units
-* move systemctl set-log-level to systemd-analyze?
-
* add a fixed dbus path for "my own unit", "my own session", ... to PID1, logind, ...
* service_coldplug() appears to reinstall the wrong stop timeout watch?
@@ -123,8 +123,6 @@ Features:
* something pulls in pcre as so dep into our daemons such as hostnamed.
-* cgroup-agent: downgrade error messages
-
* document systemd-journal-flush.service properly
* change systemd-journal-flush into a service that stays around during
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 06c8c18465..45955da179 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -539,19 +539,6 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
-
- set-log-level LEVEL
-
-
- Change current log level of the
- systemd daemon to
- LEVEL (accepts the same values
- as described in
- systemd1).
-
-
-
-
start NAME...
diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
index 905b44b6d9..a8adf87713 100644
--- a/man/systemd-analyze.xml
+++ b/man/systemd-analyze.xml
@@ -81,20 +81,28 @@
OPTIONS
dot
PATTERN
+ > file.dot
systemd-analyze
OPTIONS
dump
+
+ systemd-analyze
+ OPTIONS
+ set-log-level
+ LEVEL
+
Description
systemd-analyze may be used
- to determine system boot-up performance of the current
- boot.
+ to determine system boot-up performance statistics and
+ retrieve other state and tracing information from the
+ system and service manager.
systemd-analyze time
prints the time spent in the kernel before
@@ -154,6 +162,14 @@
change without notice and should not be parsed by
applications.
+ systemd-analyze set-log-level
+ LEVEL changes the
+ current log level of the systemd
+ daemon to LEVEL (accepts
+ the same values as
+ described in
+ systemd1).
+
If no command is passed, systemd-analyze
time is implied.
diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c
index 2748b3afc9..27d063c548 100644
--- a/src/analyze/systemd-analyze.c
+++ b/src/analyze/systemd-analyze.c
@@ -1184,6 +1184,11 @@ static int dump(DBusConnection *bus, char **args) {
dbus_error_init(&error);
+ if (!strv_isempty(args)) {
+ log_error("Too many arguments.");
+ return -E2BIG;
+ }
+
pager_open_if_enabled();
r = bus_method_call_with_reply(
@@ -1210,6 +1215,54 @@ static int dump(DBusConnection *bus, char **args) {
return 0;
}
+static int set_log_level(DBusConnection *bus, char **args) {
+ _cleanup_dbus_error_free_ DBusError error;
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+ DBusMessageIter iter, sub;
+ const char* property = "LogLevel";
+ const char* interface = "org.freedesktop.systemd1.Manager";
+ const char* value;
+
+ assert(bus);
+ assert(args);
+
+ if (strv_length(args) != 1) {
+ log_error("This command expects one argument only.");
+ return -E2BIG;
+ }
+
+ value = args[0];
+ dbus_error_init(&error);
+
+ m = dbus_message_new_method_call("org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.DBus.Properties",
+ "Set");
+ if (!m)
+ return log_oom();
+
+ dbus_message_iter_init_append(m, &iter);
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &interface) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property) ||
+ !dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, "s", &sub))
+ return log_oom();
+
+ if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &value))
+ return log_oom();
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ return log_oom();
+
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+ if (!reply) {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
+ return -EIO;
+ }
+
+ return 0;
+}
+
static void analyze_help(void) {
pager_open_if_enabled();
@@ -1236,6 +1289,7 @@ static void analyze_help(void) {
" critical-chain Print a tree of the time critical chain of units\n"
" plot Output SVG graphic showing service initialization\n"
" dot Output dependency graph in dot(1) format\n"
+ " set-log-level LEVEL Set logging threshold for systemd\n"
" dump Output state serialization of service manager\n",
program_invocation_short_name);
@@ -1368,6 +1422,8 @@ int main(int argc, char *argv[]) {
r = dot(bus, argv+optind+1);
else if (streq(argv[optind], "dump"))
r = dump(bus, argv+optind+1);
+ else if (streq(argv[optind], "set-log-level"))
+ r = set_log_level(bus, argv+optind+1);
else
log_error("Unknown operation '%s'.", argv[optind]);
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 4e33a4182f..08981a8002 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -4527,51 +4527,6 @@ finish:
return r;
}
-static int set_log_level(DBusConnection *bus, char **args) {
- _cleanup_dbus_error_free_ DBusError error;
- _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
- DBusMessageIter iter, sub;
- const char* property = "LogLevel";
- const char* interface = "org.freedesktop.systemd1.Manager";
- const char* value;
-
- assert(bus);
- assert(args);
-
- value = args[1];
- dbus_error_init(&error);
-
- m = dbus_message_new_method_call("org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.DBus.Properties",
- "Set");
- if (!m)
- return log_oom();
-
- dbus_message_iter_init_append(m, &iter);
-
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &interface) ||
- !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property) ||
- !dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, "s", &sub))
- return log_oom();
-
- if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &value)) {
- dbus_message_iter_abandon_container(&iter, &sub);
- return log_oom();
- }
-
- if (!dbus_message_iter_close_container(&iter, &sub))
- return log_oom();
-
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
- if (!reply) {
- log_error("Failed to issue method call: %s", bus_error_message(&error));
- return -EIO;
- }
-
- return 0;
-}
-
static int unit_is_enabled(DBusConnection *bus, char **args) {
_cleanup_dbus_error_free_ DBusError error;
int r;
@@ -4759,8 +4714,7 @@ static int systemctl_help(void) {
"Environment Commands:\n"
" show-environment Dump environment\n"
" set-environment [NAME=VALUE...] Set one or more environment variables\n"
- " unset-environment [NAME...] Unset one or more environment variables\n"
- " set-log-level LEVEL Set logging threshold for systemd\n\n"
+ " unset-environment [NAME...] Unset one or more environment variables\n\n"
"Manager Lifecycle Commands:\n"
" daemon-reload Reload systemd manager configuration\n"
" daemon-reexec Reexecute systemd manager\n\n"
@@ -5824,7 +5778,6 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "list-dependencies", LESS, 2, list_dependencies },
{ "set-default", EQUAL, 2, enable_unit },
{ "get-default", LESS, 1, get_default },
- { "set-log-level", EQUAL, 2, set_log_level },
{ "set-property", MORE, 3, set_property },
};