systemctl: merge log_target(), log_level(), service_log_setting()
This commit is contained in:
parent
6824c132e9
commit
77db9433a7
|
@ -6298,33 +6298,49 @@ static int switch_root(int argc, char *argv[], void *userdata) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int log_level(int argc, char *argv[], void *userdata) {
|
||||
sd_bus *bus;
|
||||
static int log_setting_internal(sd_bus *bus, const BusLocator* bloc, const char *verb, const char *value) {
|
||||
assert(bus);
|
||||
assert(STR_IN_SET(verb, "log-level", "log-target", "service-log-level", "service-log-target"));
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
bool level = endswith(verb, "log-level");
|
||||
int r;
|
||||
|
||||
if (value) {
|
||||
r = bus_set_property(bus, bloc,
|
||||
level ? "LogLevel" : "LogTarget",
|
||||
&error, "s", value);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set log %s of %s to %s: %s",
|
||||
level ? "level" : "target",
|
||||
bloc->destination, value, bus_error_message(&error, r));
|
||||
} else {
|
||||
_cleanup_free_ char *t = NULL;
|
||||
|
||||
r = bus_get_property_string(bus, bloc,
|
||||
level ? "LogLevel" : "LogTarget",
|
||||
&error, &t);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get log %s of %s: %s",
|
||||
level ? "level" : "target",
|
||||
bloc->destination, bus_error_message(&error, r));
|
||||
puts(t);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_setting(int argc, char *argv[], void *userdata) {
|
||||
sd_bus *bus;
|
||||
int r;
|
||||
|
||||
assert(argc >= 1 && argc <= 2);
|
||||
|
||||
r = acquire_bus(BUS_MANAGER, &bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (argc == 1) {
|
||||
_cleanup_free_ char *level = NULL;
|
||||
|
||||
r = bus_get_property_string(bus, bus_systemd_mgr, "LogLevel", &error, &level);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get log level: %s", bus_error_message(&error, r));
|
||||
|
||||
puts(level);
|
||||
|
||||
} else {
|
||||
assert(argc == 2);
|
||||
|
||||
r = bus_set_property(bus, bus_systemd_mgr, "LogLevel", &error, "s", argv[1]);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set log level: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
return 0;
|
||||
return log_setting_internal(bus, bus_systemd_mgr, argv[0], argv[1]);
|
||||
}
|
||||
|
||||
static int service_name_to_dbus(sd_bus *bus, const char *name, char **ret_dbus_name) {
|
||||
|
@ -6359,12 +6375,10 @@ static int service_name_to_dbus(sd_bus *bus, const char *name, char **ret_dbus_n
|
|||
|
||||
static int service_log_setting(int argc, char *argv[], void *userdata) {
|
||||
sd_bus *bus;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_free_ char *unit = NULL, *dbus_name = NULL;
|
||||
int r;
|
||||
|
||||
assert(STR_IN_SET(argv[0], "service-log-level", "service-log-target"));
|
||||
bool level = streq(argv[0], "service-log-level");
|
||||
assert(argc >= 2 && argc <= 3);
|
||||
|
||||
r = acquire_bus(BUS_FULL, &bus);
|
||||
if (r < 0)
|
||||
|
@ -6380,72 +6394,13 @@ static int service_log_setting(int argc, char *argv[], void *userdata) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (argc == 2) {
|
||||
_cleanup_free_ char *value = NULL;
|
||||
const BusLocator bloc = {
|
||||
.destination = dbus_name,
|
||||
.path = "/org/freedesktop/LogControl1",
|
||||
.interface = "org.freedesktop.LogControl1",
|
||||
};
|
||||
|
||||
r = sd_bus_get_property_string(
|
||||
bus,
|
||||
dbus_name,
|
||||
"/org/freedesktop/LogControl1",
|
||||
"org.freedesktop.LogControl1",
|
||||
level ? "LogLevel" : "LogTarget",
|
||||
&error,
|
||||
&value);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get log %s of service %s: %s",
|
||||
level ? "level" : "target",
|
||||
dbus_name, bus_error_message(&error, r));
|
||||
|
||||
puts(value);
|
||||
|
||||
} else {
|
||||
assert(argc == 3);
|
||||
|
||||
r = sd_bus_set_property(
|
||||
bus,
|
||||
dbus_name,
|
||||
"/org/freedesktop/LogControl1",
|
||||
"org.freedesktop.LogControl1",
|
||||
level ? "LogLevel" : "LogTarget",
|
||||
&error,
|
||||
"s",
|
||||
argv[2]);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set log %s of service %s to %s: %s",
|
||||
level ? "level" : "target",
|
||||
dbus_name, argv[2], bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_target(int argc, char *argv[], void *userdata) {
|
||||
sd_bus *bus;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
r = acquire_bus(BUS_MANAGER, &bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (argc == 1) {
|
||||
_cleanup_free_ char *target = NULL;
|
||||
|
||||
r = bus_get_property_string(bus, bus_systemd_mgr, "LogTarget", &error, &target);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get log target: %s", bus_error_message(&error, r));
|
||||
|
||||
puts(target);
|
||||
|
||||
} else {
|
||||
assert(argc == 2);
|
||||
|
||||
r = bus_set_property(bus, bus_systemd_mgr, "LogTarget", &error, "s", argv[1]);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set log target: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
return 0;
|
||||
return log_setting_internal(bus, &bloc, argv[0], argv[2]);
|
||||
}
|
||||
|
||||
static int service_watchdogs(int argc, char *argv[], void *userdata) {
|
||||
|
@ -9126,8 +9081,8 @@ static int systemctl_main(int argc, char *argv[]) {
|
|||
{ "help", VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, show },
|
||||
{ "daemon-reload", VERB_ANY, 1, VERB_ONLINE_ONLY, daemon_reload },
|
||||
{ "daemon-reexec", VERB_ANY, 1, VERB_ONLINE_ONLY, daemon_reload },
|
||||
{ "log-level", VERB_ANY, 2, VERB_ONLINE_ONLY, log_level },
|
||||
{ "log-target", VERB_ANY, 2, VERB_ONLINE_ONLY, log_target },
|
||||
{ "log-level", VERB_ANY, 2, VERB_ONLINE_ONLY, log_setting },
|
||||
{ "log-target", VERB_ANY, 2, VERB_ONLINE_ONLY, log_setting },
|
||||
{ "service-log-level", 2, 3, VERB_ONLINE_ONLY, service_log_setting },
|
||||
{ "service-log-target", 2, 3, VERB_ONLINE_ONLY, service_log_setting },
|
||||
{ "service-watchdogs", VERB_ANY, 2, VERB_ONLINE_ONLY, service_watchdogs },
|
||||
|
|
Loading…
Reference in New Issue