mirror of https://gerrit.osmocom.org/libosmocore
logging: log to stderr when logging is not initialized
When the logging framework is not initialized we get an error: "ERROR: osmo_log_info == NULL! You must call log_init() before using logging in ..." There are sometimes situations where some code tries to log before logging was initialied. This is a problem because the actual log line with the debug info we need is covered up by the error message from the logging framework. Lets introduce a fallback logging function that is called when the the logging framework is not available. This function can just use fprintf to output to stderr. Change-Id: I9b1b0988e02322e3e44fd4ceea3e1bc2d4df3c45
This commit is contained in:
parent
fca15ebf99
commit
4c44d46308
|
@ -11,6 +11,8 @@
|
|||
#include <osmocom/core/defs.h>
|
||||
#include <osmocom/core/linuxlist.h>
|
||||
|
||||
extern struct log_info *osmo_log_info;
|
||||
|
||||
#ifndef DEBUG
|
||||
#define DEBUG
|
||||
#endif
|
||||
|
@ -56,6 +58,10 @@ void logp(int subsys, const char *file, int line, int cont, const char *format,
|
|||
#ifndef LIBOSMOCORE_NO_LOGGING
|
||||
#define LOGPC(ss, level, fmt, args...) \
|
||||
do { \
|
||||
if (!osmo_log_info) { \
|
||||
logp_stub(__FILE__, __LINE__, 1, fmt, ##args); \
|
||||
break; \
|
||||
} \
|
||||
if (log_check_level(ss, level)) \
|
||||
logp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args); \
|
||||
} while(0)
|
||||
|
@ -94,6 +100,13 @@ void logp(int subsys, const char *file, int line, int cont, const char *format,
|
|||
#ifndef LIBOSMOCORE_NO_LOGGING
|
||||
#define LOGPSRCC(ss, level, caller_file, caller_line, cont, fmt, args...) \
|
||||
do { \
|
||||
if (!osmo_log_info) { \
|
||||
if (caller_file) \
|
||||
logp_stub(caller_file, caller_line, cont, fmt, ##args); \
|
||||
else \
|
||||
logp_stub(__FILE__, __LINE__, cont, fmt, ##args); \
|
||||
break; \
|
||||
} \
|
||||
if (log_check_level(ss, level)) {\
|
||||
if (caller_file) \
|
||||
logp2(ss, level, caller_file, caller_line, cont, fmt, ##args); \
|
||||
|
@ -381,7 +394,9 @@ struct log_target {
|
|||
void logp2(int subsys, unsigned int level, const char *file,
|
||||
int line, int cont, const char *format, ...)
|
||||
__attribute__ ((format (printf, 6, 7)));
|
||||
void logp_stub(const char *file, int line, int cont, const char *format, ...);
|
||||
int log_init(const struct log_info *inf, void *talloc_ctx);
|
||||
int log_initialized(void);
|
||||
void log_fini(void);
|
||||
int log_check_level(int subsys, unsigned int level);
|
||||
|
||||
|
|
|
@ -754,6 +754,18 @@ void logp2(int subsys, unsigned int level, const char *file, int line, int cont,
|
|||
TRACE(LIBOSMOCORE_LOG_DONE());
|
||||
}
|
||||
|
||||
/* This logging function is used as a fallback when the logging framework is
|
||||
* not is not properly initialized. */
|
||||
void logp_stub(const char *file, int line, int cont, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
if (!cont)
|
||||
fprintf(stderr, "%s:%d ", file, line);
|
||||
va_start(ap, format);
|
||||
vfprintf(stderr, format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*! Register a new log target with the logging core
|
||||
* \param[in] target Log target to be registered
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue