1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "alloc-util.h"
4 #include "bus-get-properties.h"
5 #include "bus-log-control-api.h"
9 #include "syslog-util.h"
11 int bus_property_get_log_level(
14 const char *interface
,
16 sd_bus_message
*reply
,
18 sd_bus_error
*error
) {
20 _cleanup_free_
char *t
= NULL
;
26 r
= log_level_to_string_alloc(log_get_max_level(), &t
);
30 return sd_bus_message_append(reply
, "s", t
);
33 int bus_property_set_log_level(
36 const char *interface
,
38 sd_bus_message
*value
,
40 sd_bus_error
*error
) {
48 r
= sd_bus_message_read(value
, "s", &t
);
52 r
= log_level_from_string(t
);
54 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Invalid log level '%s'", t
);
56 log_info("Setting log level to %s.", t
);
62 BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_log_target
, "s", log_target_to_string(log_get_target()));
64 int bus_property_set_log_target(
67 const char *interface
,
69 sd_bus_message
*value
,
71 sd_bus_error
*error
) {
80 r
= sd_bus_message_read(value
, "s", &t
);
84 target
= log_target_from_string(t
);
86 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Invalid log target '%s'", t
);
88 log_info("Setting log target to %s.", log_target_to_string(target
));
89 log_set_target(target
);
95 BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_syslog_identifier
, "s", program_invocation_short_name
);
97 static const sd_bus_vtable log_control_vtable
[] = {
98 SD_BUS_VTABLE_START(0),
100 SD_BUS_WRITABLE_PROPERTY("LogLevel", "s", bus_property_get_log_level
, bus_property_set_log_level
, 0, 0),
101 SD_BUS_WRITABLE_PROPERTY("LogTarget", "s", bus_property_get_log_target
, bus_property_set_log_target
, 0, 0),
102 SD_BUS_PROPERTY("SyslogIdentifier", "s", bus_property_get_syslog_identifier
, 0, 0),
104 /* One of those days we might want to add a similar, second interface to cover common service
105 * operations such as Reload(), Reexecute(), Exit() … and maybe some properties exposing version
106 * number and other meta-data of the service. */
111 const BusObjectImplementation log_control_object
= {
112 "/org/freedesktop/LogControl1",
113 "org.freedesktop.LogControl1",
114 .vtables
= BUS_VTABLES(log_control_vtable
),