chiark / gitweb /
systemctl: add command set-log-level
authorVáclav Pavlín <vpavlin@redhat.com>
Wed, 29 May 2013 14:08:11 +0000 (16:08 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 31 May 2013 00:44:41 +0000 (20:44 -0400)
Command changes current log level

TODO
man/systemctl.xml
src/systemctl/systemctl.c

diff --git a/TODO b/TODO
index 7883b7e33a4051e45ac70055ca43b9f7e4a5a122..9ba1de01cb1935a02402663d34d50a7797944337 100644 (file)
--- a/TODO
+++ b/TODO
@@ -91,8 +91,6 @@ Features:
 
 * we need dynamic units
 
-* add s.th. like "systemctl set-log-level debug"
-
 * cgtop: make cgtop useful in a container
 
 * test/:
index 430e16c327b77d83fa522c57ea26129f737328ce..54573e8f5f9bae73706751d1002c17f85ef54fb2 100644 (file)
@@ -546,6 +546,19 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
         </listitem>
       </varlistentry>
 
+       <varlistentry>
+         <term><command>set-log-level <replaceable>LEVEL</replaceable></command></term>
+
+         <listitem>
+           <para>Change current log level of the
+           <command>systemd</command> daemon to
+           <replaceable>LEVEL</replaceable> (accepts the same values
+           as <option>--log-level=</option> described in
+           <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).
+           </para>
+         </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><command>start <replaceable>NAME</replaceable>...</command></term>
 
index 56021a6889b33ff45d5583dcbc4f773689cac669..5ccbbbc0c72987abde5d416a5f1811e4ba72f526 100644 (file)
@@ -4462,6 +4462,51 @@ 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;
@@ -5707,6 +5752,7 @@ 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     },
         };
 
         int left;