Add a DBus interface for setting the log level.
Lifted almost entirely from similar code in NetworkManager. BUG=chromium-os:15197 TEST='dbus-send --print-reply --system --dest=org.freedesktop.ModemManager /org/freedesktop/ModemManager org.freedesktop.ModemManager.SetLogging string:DEBUG' Also try valid log levels 'ERR', 'WARN', 'INFO', and an invalid log level, such as 'ABCDE'. Change-Id: I2bddcd0319f4966dd293b119f68e7cc1697949b7 Reviewed-on: http://gerrit.chromium.org/gerrit/3134 Tested-by: Nathan J. Williams <njw@chromium.org> Reviewed-by: Eric Shienbrood <ers@chromium.org>
This commit is contained in:

committed by
Dan Williams

parent
b7820cf6e1
commit
1b73fa1541
@@ -23,6 +23,18 @@
|
||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_scan_devices"/>
|
||||
</method>
|
||||
|
||||
<method name="SetLogging">
|
||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_set_logging"/>
|
||||
<tp:docstring>
|
||||
Set logging verbosity.
|
||||
</tp:docstring>
|
||||
<arg name="level" type="s" direction="in">
|
||||
<tp:docstring>
|
||||
One of [ERR, WARN, INFO, DEBUG].
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
<signal name="DeviceAdded">
|
||||
<tp:docstring>
|
||||
A device was added to the system.
|
||||
|
37
src/mm-log.c
37
src/mm-log.c
@@ -162,6 +162,24 @@ log_handler (const gchar *log_domain,
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
mm_log_set_level (const char *level, GError **error)
|
||||
{
|
||||
gboolean found = FALSE;
|
||||
const LogDesc *diter;
|
||||
|
||||
for (diter = &level_descs[0]; diter->name; diter++) {
|
||||
if (!strcasecmp (diter->name, level)) {
|
||||
log_level = diter->num;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
g_set_error (error, 0, 0, "Unknown log level '%s'", level);
|
||||
return found;
|
||||
}
|
||||
|
||||
gboolean
|
||||
mm_log_setup (const char *level,
|
||||
const char *log_file,
|
||||
@@ -170,23 +188,8 @@ mm_log_setup (const char *level,
|
||||
GError **error)
|
||||
{
|
||||
/* levels */
|
||||
if (level && strlen (level)) {
|
||||
gboolean found = FALSE;
|
||||
const LogDesc *diter;
|
||||
|
||||
for (diter = &level_descs[0]; diter->name; diter++) {
|
||||
if (!strcasecmp (diter->name, level)) {
|
||||
log_level = diter->num;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
g_set_error (error, 0, 0, "Unknown log level '%s'", level);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
if (level && strlen (level) && !mm_log_set_level (level, error))
|
||||
return FALSE;
|
||||
|
||||
if (show_timestamps)
|
||||
ts_flags = TS_FLAG_WALL;
|
||||
|
@@ -47,6 +47,8 @@ void _mm_log (const char *loc,
|
||||
const char *fmt,
|
||||
...) __attribute__((__format__ (__printf__, 4, 5)));
|
||||
|
||||
gboolean mm_log_set_level (const char *level, GError **error);
|
||||
|
||||
gboolean mm_log_setup (const char *level,
|
||||
const char *log_file,
|
||||
gboolean show_ts,
|
||||
|
@@ -34,6 +34,10 @@ static gboolean impl_manager_enumerate_devices (MMManager *manager,
|
||||
static void impl_manager_scan_devices (MMManager *manager,
|
||||
DBusGMethodInvocation *context);
|
||||
|
||||
static gboolean impl_manager_set_logging (MMManager *manager,
|
||||
const char *level,
|
||||
GError **error);
|
||||
|
||||
#include "mm-manager-glue.h"
|
||||
|
||||
G_DEFINE_TYPE (MMManager, mm_manager, G_TYPE_OBJECT)
|
||||
@@ -1001,6 +1005,19 @@ impl_manager_scan_devices (MMManager *manager,
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
impl_manager_set_logging (MMManager *manager,
|
||||
const char *level,
|
||||
GError **error)
|
||||
{
|
||||
if (mm_log_set_level (level, error)) {
|
||||
mm_info ("logging: level '%s'", level);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mm_manager_start (MMManager *manager)
|
||||
{
|
||||
|
Reference in New Issue
Block a user