Skip to content
Snippets Groups Projects
Commit 4dd3dbf6 authored by Utz-Uwe Haus's avatar Utz-Uwe Haus
Browse files

implement support for string-named debug levels

parent 01f6b912
No related branches found
No related tags found
2 merge requests!3Jsc ci update,!2update JSC-CI branch to devel
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
**/ **/
/* /*
* Copyright (C) 2019 Cray Computer GmbH * Copyright (C) 2019 Cray Computer GmbH
* Copyright (C) 2020 HPE, HP Schweiz GmbH
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are * modification, are permitted provided that the following conditions are
...@@ -38,6 +39,7 @@ ...@@ -38,6 +39,7 @@
#include "maestro/i_globals.h" #include "maestro/i_globals.h"
#include "maestro/i_statistics.h" #include "maestro/i_statistics.h"
#include <errno.h> #include <errno.h>
#include <ctype.h>
#include <pthread.h> #include <pthread.h>
#ifdef HAVE_PTHREAD_NP_H #ifdef HAVE_PTHREAD_NP_H
...@@ -259,7 +261,6 @@ mstro__ensure_threadid(void) ...@@ -259,7 +261,6 @@ mstro__ensure_threadid(void)
static _Atomic(bool) g_queried_env = false; static _Atomic(bool) g_queried_env = false;
/* log destination choice */ /* log destination choice */
static int g_log_dst = MSTRO_LOG_DST_STDERR; static int g_log_dst = MSTRO_LOG_DST_STDERR;
static char *g_env_debug_flag = NULL;
static uint64_t g_log_module_mask = MSTRO_LOG_MODULE_ALL; static uint64_t g_log_module_mask = MSTRO_LOG_MODULE_ALL;
...@@ -332,15 +333,39 @@ const char *mstro_log_module_name(uint64_t module) ...@@ -332,15 +333,39 @@ const char *mstro_log_module_name(uint64_t module)
return "???"; return "???";
} }
static inline
int mstro_log__parse_debug_level(const char *debug_level)
{
/* FIXME: improve when merging with libERL */
if(strncasecmp(debug_level, "noise", 1)==0) {
return MSTRO_LOG_NOISE;
} else if(strncasecmp(debug_level, "debug", 1)==0) {
return MSTRO_LOG_DEBUG;
} else if(strncasecmp(debug_level, "info", 1)==0) {
return MSTRO_LOG_INFO;
} else if(strncasecmp(debug_level, "warn", 1)==0) {
return MSTRO_LOG_WARN;
} else if(strncasecmp(debug_level, "err", 1)==0) {
return MSTRO_LOG_ERR;
} else {
return MSTRO_MAX_LOG_LEVEL; /* default */
}
}
/* one-time init function for log infrastructure */ /* one-time init function for log infrastructure */
static inline static inline
void void
mstro_log__init() mstro_log__init()
{ {
_Atomic(bool) already_initialized =
atomic_exchange(&g_queried_env, true);
if(!already_initialized) { pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
int err = pthread_mutex_lock(&mtx);
if(err!=0)
abort();
if(!g_queried_env) {
/* we're the first ones, do init */
g_queried_env = true;
g_pid=getpid(); g_pid=getpid();
const char *env_log_dst = getenv(MSTRO_ENV_LOG_DST); const char *env_log_dst = getenv(MSTRO_ENV_LOG_DST);
...@@ -361,22 +386,26 @@ mstro_log__init() ...@@ -361,22 +386,26 @@ mstro_log__init()
} }
} }
g_env_debug_flag = getenv(MSTRO_ENV_LOG_LEVEL); char * env_debug_level = getenv(MSTRO_ENV_LOG_LEVEL);
if(g_env_debug_flag!=NULL) { if(env_debug_level!=NULL) {
int env_level = atoi(g_env_debug_flag); if(isalpha(env_debug_level[0])) {
if(env_level<0 || env_level>=MSTRO_log__MAX) { g_debug_level = mstro_log__parse_debug_level(env_debug_level);
} else {
g_debug_level = atoi(env_debug_level);
}
if(g_debug_level<0 || g_debug_level>=MSTRO_log__MAX) {
LOG_WARN(MSTRO_LOG_MODULE_CORE, LOG_WARN(MSTRO_LOG_MODULE_CORE,
"Attempt to set debug level to %s in environment variable %s, ignored\n", "Attempt to set debug level to %s in environment variable %s, ignored\n",
g_env_debug_flag, MSTRO_ENV_LOG_LEVEL); g_debug_level, MSTRO_ENV_LOG_LEVEL);
g_debug_level = MSTRO_MAX_LOG_LEVEL;
} else { } else {
g_debug_level = MIN(MSTRO_MAX_LOG_LEVEL,env_level); g_debug_level = MIN(MSTRO_MAX_LOG_LEVEL,g_debug_level);
} }
LOG_INFO(MSTRO_LOG_MODULE_CORE, LOG_INFO(MSTRO_LOG_MODULE_CORE,
"Environment variable %s sets log level to %d\n", "Environment variable %s sets log level to %d\n",
MSTRO_ENV_LOG_LEVEL, g_debug_level); MSTRO_ENV_LOG_LEVEL, g_debug_level);
} }
char *env_log_color = getenv(MSTRO_ENV_LOG_COLOR); char *env_log_color = getenv(MSTRO_ENV_LOG_COLOR);
if(env_log_color!=NULL) { if(env_log_color!=NULL) {
enum ansi_color_symbol i; enum ansi_color_symbol i;
...@@ -412,7 +441,14 @@ mstro_log__init() ...@@ -412,7 +441,14 @@ mstro_log__init()
/* thread ID can't be set here, every thread sets it at first call */ /* thread ID can't be set here, every thread sets it at first call */
} else {
/* we're not the first */
LOG_DEBUG(MSTRO_LOG_MODULE_CORE,
"Competing init, lost to other thread\n");
} }
err=pthread_mutex_unlock(&mtx);
if(err!=0)
abort();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment