logging: merge branch 'th/logging-inline-enabled'

This commit is contained in:
Thomas Haller
2016-05-20 12:52:34 +02:00
2 changed files with 30 additions and 51 deletions

View File

@@ -98,10 +98,15 @@ typedef struct {
LogFormatFlags log_format_level;
} LogLevelDesc;
NMLogDomain _nm_logging_enabled_state[_LOGL_N_REAL] = {
/* nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL); */
[LOGL_INFO] = LOGD_DEFAULT,
[LOGL_WARN] = LOGD_DEFAULT,
[LOGL_ERR] = LOGD_DEFAULT,
};
static struct {
NMLogLevel log_level;
NMLogDomain logging[_LOGL_N_REAL];
gboolean logging_set_up;
LogFormatFlags log_format_flags;
enum {
LOG_BACKEND_GLIB,
@@ -116,6 +121,7 @@ static struct {
* but that feature doesn't seem well supported. */
const LogDesc domain_desc[_DOMAIN_DESC_LEN];
} global = {
/* nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL); */
.log_level = LOGL_INFO,
.log_backend = LOG_BACKEND_GLIB,
.log_format_flags = _LOG_FORMAT_FLAG_DEFAULT,
@@ -185,19 +191,6 @@ static char *_domains_to_string (gboolean include_level_override);
/************************************************************************/
static void
_ensure_initialized (void)
{
if (G_UNLIKELY (!global.logging_set_up)) {
int errsv = errno;
nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL);
/* must ensure that errno is not modified. */
errno = errsv;
}
}
static gboolean
match_log_level (const char *level,
NMLogLevel *out_level,
@@ -224,7 +217,7 @@ nm_logging_setup (const char *level,
GError **error)
{
GString *unrecognized = NULL;
NMLogDomain new_logging[G_N_ELEMENTS (global.logging)];
NMLogDomain new_logging[G_N_ELEMENTS (_nm_logging_enabled_state)];
NMLogLevel new_log_level = global.log_level;
char **tmp, **iter;
int i;
@@ -235,13 +228,8 @@ nm_logging_setup (const char *level,
g_return_val_if_fail (!error || !*error, FALSE);
/* domains */
if (!domains || !*domains) {
domains = global.logging_set_up
? (domains_free = _domains_to_string (FALSE))
: LOGD_DEFAULT_STRING;
}
global.logging_set_up = TRUE;
if (!domains || !*domains)
domains = (domains_free = _domains_to_string (FALSE));
for (i = 0; i < G_N_ELEMENTS (new_logging); i++)
new_logging[i] = 0;
@@ -253,7 +241,7 @@ nm_logging_setup (const char *level,
if (new_log_level == _LOGL_KEEP) {
new_log_level = global.log_level;
for (i = 0; i < G_N_ELEMENTS (new_logging); i++)
new_logging[i] = global.logging[i];
new_logging[i] = _nm_logging_enabled_state[i];
}
}
@@ -321,7 +309,7 @@ nm_logging_setup (const char *level,
if (domain_log_level == _LOGL_KEEP) {
for (i = 0; i < G_N_ELEMENTS (new_logging); i++)
new_logging[i] = (new_logging[i] & ~bits) | (global.logging[i] & bits);
new_logging[i] = (new_logging[i] & ~bits) | (_nm_logging_enabled_state[i] & bits);
} else {
for (i = 0; i < G_N_ELEMENTS (new_logging); i++) {
if (i < domain_log_level)
@@ -339,7 +327,7 @@ nm_logging_setup (const char *level,
global.log_level = new_log_level;
for (i = 0; i < G_N_ELEMENTS (new_logging); i++)
global.logging[i] = new_logging[i];
_nm_logging_enabled_state[i] = new_logging[i];
if ( had_platform_debug
&& _nm_logging_clear_platform_logging_cache
@@ -384,8 +372,6 @@ nm_logging_all_levels_to_string (void)
const char *
nm_logging_domains_to_string (void)
{
_ensure_initialized ();
if (G_UNLIKELY (!global.logging_domains_to_string))
global.logging_domains_to_string = _domains_to_string (TRUE);
@@ -406,7 +392,7 @@ _domains_to_string (gboolean include_level_override)
str = g_string_sized_new (75);
for (diter = &global.domain_desc[0]; diter->name; diter++) {
/* If it's set for any lower level, it will also be set for LOGL_ERR */
if (!(diter->num & global.logging[LOGL_ERR]))
if (!(diter->num & _nm_logging_enabled_state[LOGL_ERR]))
continue;
if (str->len)
@@ -418,15 +404,15 @@ _domains_to_string (gboolean include_level_override)
/* Check if it's logging at a lower level than the default. */
for (i = 0; i < global.log_level; i++) {
if (diter->num & global.logging[i]) {
if (diter->num & _nm_logging_enabled_state[i]) {
g_string_append_printf (str, ":%s", global.level_desc[i].name);
break;
}
}
/* Check if it's logging at a higher level than the default. */
if (!(diter->num & global.logging[global.log_level])) {
for (i = global.log_level + 1; i < G_N_ELEMENTS (global.logging); i++) {
if (diter->num & global.logging[i]) {
if (!(diter->num & _nm_logging_enabled_state[global.log_level])) {
for (i = global.log_level + 1; i < G_N_ELEMENTS (_nm_logging_enabled_state); i++) {
if (diter->num & _nm_logging_enabled_state[i]) {
g_string_append_printf (str, ":%s", global.level_desc[i].name);
break;
}
@@ -459,18 +445,6 @@ nm_logging_all_domains_to_string (void)
return str->str;
}
gboolean
nm_logging_enabled (NMLogLevel level, NMLogDomain domain)
{
if ((guint) level >= G_N_ELEMENTS (global.logging))
g_return_val_if_reached (FALSE);
/* This function is guaranteed not to modify errno. */
_ensure_initialized ();
return !!(global.logging[level] & domain);
}
#if SYSTEMD_JOURNAL
__attribute__((__format__ (__printf__, 4, 5)))
static void
@@ -515,12 +489,10 @@ _nm_log_impl (const char *file,
char s_buf_location[1024];
GTimeVal tv;
if ((guint) level >= G_N_ELEMENTS (global.logging))
if ((guint) level >= G_N_ELEMENTS (_nm_logging_enabled_state))
g_return_if_reached ();
_ensure_initialized ();
if (!(global.logging[level] & domain))
if (!(_nm_logging_enabled_state[level] & domain))
return;
/* Make sure that %m maps to the specified error */
@@ -609,7 +581,7 @@ _nm_log_impl (const char *file,
const char *s_domain_1 = NULL;
GString *s_domain_all = NULL;
NMLogDomain dom_all = domain;
NMLogDomain dom = dom_all & global.logging[level];
NMLogDomain dom = dom_all & _nm_logging_enabled_state[level];
for (diter = &global.domain_desc[0]; diter->name; diter++) {
if (!NM_FLAGS_HAS (dom_all, diter->num))

View File

@@ -158,7 +158,14 @@ void _nm_log_impl (const char *file,
const char *nm_logging_level_to_string (void);
const char *nm_logging_domains_to_string (void);
gboolean nm_logging_enabled (NMLogLevel level, NMLogDomain domain);
extern NMLogDomain _nm_logging_enabled_state[_LOGL_N_REAL];
static inline gboolean
nm_logging_enabled (NMLogLevel level, NMLogDomain domain)
{
nm_assert (((guint) level) < G_N_ELEMENTS (_nm_logging_enabled_state));
return !!(_nm_logging_enabled_state[level] & domain);
}
const char *nm_logging_all_levels_to_string (void);
const char *nm_logging_all_domains_to_string (void);