forked from enlightenment/efl
eina_log improvements: docs, micro optimizations and stderr logging by default.
* more docs. * do not getenv("EINA_LOG_ABORT") everytime, just at init. * EINA_UNLIKELY() in some critical paths (not that big impact anyway) * eina_log_print_cb_stderr() and use it by default. SVN revision: 42196
This commit is contained in:
parent
bb717a3be5
commit
418c99a8e3
|
@ -191,6 +191,7 @@ EAPI void eina_log_domain_unregister(int domain);
|
||||||
|
|
||||||
EAPI void eina_log_print(int domain, Eina_Log_Level level, const char *file, const char *function, int line, const char *fmt, ...) EINA_ARG_NONNULL(2, 3, 5);
|
EAPI void eina_log_print(int domain, Eina_Log_Level level, const char *file, const char *function, int line, const char *fmt, ...) EINA_ARG_NONNULL(2, 3, 5);
|
||||||
EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
||||||
|
EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
||||||
EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -338,6 +338,7 @@ static int _eina_log_init_count = 0;
|
||||||
// Disable color flag (can be changed through the env var
|
// Disable color flag (can be changed through the env var
|
||||||
// EINA_LOG_ENV_COLOR_DISABLE).
|
// EINA_LOG_ENV_COLOR_DISABLE).
|
||||||
static Eina_Bool _disable_color = EINA_FALSE;
|
static Eina_Bool _disable_color = EINA_FALSE;
|
||||||
|
static Eina_Bool _abort_on_critical = EINA_FALSE;
|
||||||
|
|
||||||
// List of domains registered
|
// List of domains registered
|
||||||
static Eina_Log_Domain *_log_domains = NULL;
|
static Eina_Log_Domain *_log_domains = NULL;
|
||||||
|
@ -345,7 +346,7 @@ static int _log_domains_count = 0;
|
||||||
static int _log_domains_allocated = 0;
|
static int _log_domains_allocated = 0;
|
||||||
|
|
||||||
// Default function for printing on domains
|
// Default function for printing on domains
|
||||||
static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stdout;
|
static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stderr;
|
||||||
static void *_print_cb_data = NULL;
|
static void *_print_cb_data = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -593,6 +594,14 @@ EAPI int EINA_LOG_DOMAIN_GLOBAL = 0;
|
||||||
* eina_log_shutdown() must be called to shut down the log
|
* eina_log_shutdown() must be called to shut down the log
|
||||||
* module.
|
* module.
|
||||||
*
|
*
|
||||||
|
* The default logging method is eina_log_print_cb_stderr(), which
|
||||||
|
* will output fancy colored messages to standard error stream. See
|
||||||
|
* its documentation on how to disable coloring.
|
||||||
|
*
|
||||||
|
* This module will optionally abort program execution if message
|
||||||
|
* level is below or equal to @c EINA_LOG_LEVEL_CRITICAL and
|
||||||
|
* @c EINA_LOG_ABORT=1.
|
||||||
|
*
|
||||||
* @see eina_init()
|
* @see eina_init()
|
||||||
*/
|
*/
|
||||||
EAPI int
|
EAPI int
|
||||||
|
@ -607,6 +616,9 @@ eina_log_init(void)
|
||||||
if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE)) && (atoi(tmp) == 1))
|
if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE)) && (atoi(tmp) == 1))
|
||||||
_disable_color = EINA_TRUE;
|
_disable_color = EINA_TRUE;
|
||||||
|
|
||||||
|
if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1))
|
||||||
|
_abort_on_critical = EINA_TRUE;
|
||||||
|
|
||||||
// Global log level
|
// Global log level
|
||||||
if ((level = getenv(EINA_LOG_ENV_LEVEL)))
|
if ((level = getenv(EINA_LOG_ENV_LEVEL)))
|
||||||
_log_level = atoi(level);
|
_log_level = atoi(level);
|
||||||
|
@ -670,6 +682,11 @@ eina_log_shutdown(void)
|
||||||
return --_eina_log_init_count;
|
return --_eina_log_init_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets logging method to use.
|
||||||
|
*
|
||||||
|
* By default, eina_log_print_cb_stderr() is used.
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
|
eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
|
||||||
{
|
{
|
||||||
|
@ -768,6 +785,40 @@ eina_log_domain_unregister(int domain)
|
||||||
d->deleted = 1;
|
d->deleted = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default logging method, this will output to standard error stream.
|
||||||
|
*
|
||||||
|
* This method will colorize output based on domain provided color and
|
||||||
|
* message logging level. To disable color, set environment variable
|
||||||
|
* EINA_LOG_COLOR_DISABLE=1
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
eina_log_print_cb_stderr(const Eina_Log_Domain *d, Eina_Log_Level level,
|
||||||
|
const char *file, const char *fnc, int line, const char *fmt,
|
||||||
|
__UNUSED__ void *data, va_list args)
|
||||||
|
{
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(d);
|
||||||
|
|
||||||
|
// Normalize levels for printing. Negative leveled messages go will have
|
||||||
|
// same color as CRITICAL and higher than debug will be regular blue.
|
||||||
|
if (level < 0) level = 0;
|
||||||
|
else if (level > 4) level = 5;
|
||||||
|
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s %s%s:%d %s()%s ", d->domain_str,
|
||||||
|
(!_disable_color) ? _colors[level] : "",
|
||||||
|
file, line, fnc,
|
||||||
|
(!_disable_color) ? EINA_COLOR_RESET: "");
|
||||||
|
vprintf(fmt, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alternative logging method, this will output to standard output stream.
|
||||||
|
*
|
||||||
|
* This method will colorize output based on domain provided color and
|
||||||
|
* message logging level. To disable color, set environment variable
|
||||||
|
* EINA_LOG_COLOR_DISABLE=1
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level,
|
eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level,
|
||||||
const char *file, const char *fnc, int line, const char *fmt,
|
const char *file, const char *fnc, int line, const char *fmt,
|
||||||
|
@ -787,6 +838,11 @@ eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level,
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alternative logging method, this will output to given file stream.
|
||||||
|
*
|
||||||
|
* This method will never output color.
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
eina_log_print_cb_file(const Eina_Log_Domain *d, __UNUSED__ Eina_Log_Level level,
|
eina_log_print_cb_file(const Eina_Log_Domain *d, __UNUSED__ Eina_Log_Level level,
|
||||||
const char *file, const char *fnc, int line, const char *fmt,
|
const char *file, const char *fnc, int line, const char *fmt,
|
||||||
|
@ -814,8 +870,8 @@ eina_log_print(int domain, Eina_Log_Level level, const char *file,
|
||||||
EINA_SAFETY_ON_NULL_RETURN(fnc);
|
EINA_SAFETY_ON_NULL_RETURN(fnc);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(fmt);
|
EINA_SAFETY_ON_NULL_RETURN(fmt);
|
||||||
|
|
||||||
if (domain >= _log_domains_count) return;
|
if (EINA_UNLIKELY(domain >= _log_domains_count)) return;
|
||||||
if (domain < 0) return;
|
if (EINA_UNLIKELY(domain < 0)) return;
|
||||||
|
|
||||||
d = &_log_domains[domain];
|
d = &_log_domains[domain];
|
||||||
|
|
||||||
|
@ -825,6 +881,7 @@ eina_log_print(int domain, Eina_Log_Level level, const char *file,
|
||||||
_print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args);
|
_print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
if ((getenv(EINA_LOG_ENV_ABORT) && level <= EINA_LOG_LEVEL_CRITICAL))
|
if (EINA_UNLIKELY(_abort_on_critical) &&
|
||||||
|
EINA_UNLIKELY(level <= EINA_LOG_LEVEL_CRITICAL))
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue