laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/26950 )

Change subject: logging: log to stderr when logging is not initialized
......................................................................

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
---
M include/osmocom/core/logging.h
M src/logging.c
2 files changed, 27 insertions(+), 0 deletions(-)

Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  daniel: Looks good to me, approved
  laforge: Looks good to me, approved



diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 9c49876..21b98f6 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -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 @@
 #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 @@
 #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 @@
 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);

diff --git a/src/logging.c b/src/logging.c
index 94d183f..148bb27 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -754,6 +754,18 @@
        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
  */

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/26950
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I9b1b0988e02322e3e44fd4ceea3e1bc2d4df3c45
Gerrit-Change-Number: 26950
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to