logging: add D-Bus method to change logging
This commit is contained in:
@@ -96,6 +96,28 @@
|
|||||||
</arg>
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
<method name="SetLogging">
|
||||||
|
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_set_logging"/>
|
||||||
|
<tp:docstring>
|
||||||
|
Set logging verbosity and which operations are logged.
|
||||||
|
</tp:docstring>
|
||||||
|
<arg name="level" type="s" direction="in">
|
||||||
|
<tp:docstring>
|
||||||
|
One of [ERR, WARN, INFO, DEBUG].
|
||||||
|
</tp:docstring>
|
||||||
|
</arg>
|
||||||
|
<arg name="domains" type="s" direction="in">
|
||||||
|
<tp:docstring>
|
||||||
|
A combination of logging domains separated by commas (','), or "NONE"
|
||||||
|
to disable logging. Each domain enables logging for operations
|
||||||
|
related to that domain. Available domains are: [NONE, HW, RKILL,
|
||||||
|
ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4,
|
||||||
|
DNS, VPN, SHARING, SUPPLICANT, USER_SET, SYS_SET, SUSPEND, CORE,
|
||||||
|
DEVICE, OLPC]
|
||||||
|
</tp:docstring>
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
<property name="WirelessEnabled" type="b" access="readwrite">
|
<property name="WirelessEnabled" type="b" access="readwrite">
|
||||||
<tp:docstring>
|
<tp:docstring>
|
||||||
Indicates if wireless is currently enabled or not.
|
Indicates if wireless is currently enabled or not.
|
||||||
|
@@ -85,6 +85,40 @@ static const LogDesc domain_descs[] = {
|
|||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/************************************************************************/
|
||||||
|
|
||||||
|
enum {
|
||||||
|
NM_LOGGING_ERROR_UNKNOWN_LEVEL = 0,
|
||||||
|
NM_LOGGING_ERROR_UNKNOWN_DOMAIN = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
|
||||||
|
|
||||||
|
GQuark
|
||||||
|
nm_logging_error_quark (void)
|
||||||
|
{
|
||||||
|
static GQuark ret = 0;
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
ret = g_quark_from_static_string ("nm_logging_error");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
nm_logging_error_get_type (void)
|
||||||
|
{
|
||||||
|
static GType etype = 0;
|
||||||
|
|
||||||
|
if (etype == 0) {
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
ENUM_ENTRY (NM_LOGGING_ERROR_UNKNOWN_LEVEL, "UnknownLevel"),
|
||||||
|
ENUM_ENTRY (NM_LOGGING_ERROR_UNKNOWN_DOMAIN, "UnknownDomain"),
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
};
|
||||||
|
etype = g_enum_register_static ("NMLoggingError", values);
|
||||||
|
}
|
||||||
|
return etype;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
@@ -108,18 +142,22 @@ nm_logging_setup (const char *level, const char *domains, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
g_set_error (error, 0, 0, _("Unknown log level '%s'"), level);
|
g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_LEVEL,
|
||||||
|
_("Unknown log level '%s'"), level);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* domains */
|
/* domains */
|
||||||
if (domains && strlen (domains)) {
|
if (domains && strlen (domains)) {
|
||||||
tmp = g_strsplit (domains, ",", 0);
|
tmp = g_strsplit_set (domains, ", ", 0);
|
||||||
for (iter = tmp; iter && *iter; iter++) {
|
for (iter = tmp; iter && *iter; iter++) {
|
||||||
const LogDesc *diter;
|
const LogDesc *diter;
|
||||||
gboolean found = FALSE;
|
gboolean found = FALSE;
|
||||||
|
|
||||||
|
if (!strlen (*iter))
|
||||||
|
continue;
|
||||||
|
|
||||||
for (diter = &domain_descs[0]; diter->name; diter++) {
|
for (diter = &domain_descs[0]; diter->name; diter++) {
|
||||||
if (!strcasecmp (diter->name, *iter)) {
|
if (!strcasecmp (diter->name, *iter)) {
|
||||||
new_domains |= diter->num;
|
new_domains |= diter->num;
|
||||||
@@ -129,7 +167,8 @@ nm_logging_setup (const char *level, const char *domains, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
g_set_error (error, 0, 0, _("Unknown log domain '%s'"), *iter);
|
g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_DOMAIN,
|
||||||
|
_("Unknown log domain '%s'"), *iter);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@
|
|||||||
#define NM_LOGGING_H
|
#define NM_LOGGING_H
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
/* Log domains */
|
/* Log domains */
|
||||||
enum {
|
enum {
|
||||||
@@ -62,6 +63,12 @@ enum {
|
|||||||
LOGL_DEBUG = 0x00000004
|
LOGL_DEBUG = 0x00000004
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define NM_LOGGING_ERROR (nm_logging_error_quark ())
|
||||||
|
#define NM_TYPE_LOGGING_ERROR (nm_logging_error_get_type ())
|
||||||
|
GQuark nm_logging_error_quark (void);
|
||||||
|
GType nm_logging_error_get_type (void);
|
||||||
|
|
||||||
|
|
||||||
#define nm_log_err(domain, fmt, args...) \
|
#define nm_log_err(domain, fmt, args...) \
|
||||||
{ _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_ERR, fmt, ##args); }
|
{ _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_ERR, fmt, ##args); }
|
||||||
|
|
||||||
|
@@ -79,6 +79,11 @@ static gboolean impl_manager_deactivate_connection (NMManager *manager,
|
|||||||
|
|
||||||
static gboolean impl_manager_sleep (NMManager *manager, gboolean sleep, GError **err);
|
static gboolean impl_manager_sleep (NMManager *manager, gboolean sleep, GError **err);
|
||||||
|
|
||||||
|
static gboolean impl_manager_set_logging (NMManager *manager,
|
||||||
|
const char *level,
|
||||||
|
const char *domains,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
/* Legacy 0.6 compatibility interface */
|
/* Legacy 0.6 compatibility interface */
|
||||||
|
|
||||||
static gboolean impl_manager_legacy_sleep (NMManager *manager, GError **err);
|
static gboolean impl_manager_legacy_sleep (NMManager *manager, GError **err);
|
||||||
@@ -2756,6 +2761,18 @@ impl_manager_legacy_state (NMManager *manager, guint32 *state, GError **err)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
impl_manager_set_logging (NMManager *manager,
|
||||||
|
const char *level,
|
||||||
|
const char *domains,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
if (nm_logging_setup (level, domains, error)) {
|
||||||
|
nm_log_info (LOGD_CORE, "logging: level '%s' domains '%s'", level, domains);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Connections */
|
/* Connections */
|
||||||
|
|
||||||
@@ -3353,5 +3370,6 @@ nm_manager_class_init (NMManagerClass *manager_class)
|
|||||||
&dbus_glib_nm_manager_object_info);
|
&dbus_glib_nm_manager_object_info);
|
||||||
|
|
||||||
dbus_g_error_domain_register (NM_MANAGER_ERROR, NULL, NM_TYPE_MANAGER_ERROR);
|
dbus_g_error_domain_register (NM_MANAGER_ERROR, NULL, NM_TYPE_MANAGER_ERROR);
|
||||||
|
dbus_g_error_domain_register (NM_LOGGING_ERROR, "org.freedesktop.NetworkManager.Logging", NM_TYPE_LOGGING_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user