<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12094">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add osmo_init_logging_std*()<br><br>The osmo_init_logging_stdout() function is similar to<br>osmo_init_logging2() but uses stdout as a default log target instead of<br>stderr. It's expected to used by applications without vty (test code for<br>example).<br><br>The osmo_init_logging_stderr() is equivalent of osmo_init_logging2()<br>implemented on top of the same primitives as osmo_init_logging_stdout().<br><br>Logging test expanded to make sure that we only initialize logging once.<br><br>Change-Id: I0fe8dc4a41aba4e4509540266e229700e8ec083c<br>---<br>M include/osmocom/core/application.h<br>M src/application.c<br>M tests/logging/logging_vty_test.c<br>3 files changed, 51 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/94/12094/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/application.h b/include/osmocom/core/application.h</span><br><span>index edf59ed..c1e5b09 100644</span><br><span>--- a/include/osmocom/core/application.h</span><br><span>+++ b/include/osmocom/core/application.h</span><br><span>@@ -13,12 +13,15 @@</span><br><span> /*! one instance of a logging target (file, stderr, ...) */</span><br><span> struct log_target;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! the default logging target, logging to stderr */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! the default logging targets, logging to stderr or stdout */</span><br><span> extern struct log_target *osmo_stderr_target;</span><br><span style="color: hsl(120, 100%, 40%);">+extern struct log_target *osmo_stdout_target;</span><br><span> </span><br><span> void osmo_init_ignore_signals(void);</span><br><span> int osmo_init_logging(const struct log_info *)</span><br><span>     OSMO_DEPRECATED("use osmo_init_logging2() instead to avoid a NULL talloc ctx");</span><br><span> int osmo_init_logging2(void *ctx, const struct log_info *log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_init_logging_stdout(void *ctx, const struct log_info *log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_init_logging_stderr(void *ctx, const struct log_info *log_info);</span><br><span> </span><br><span> int osmo_daemonize(void);</span><br><span>diff --git a/src/application.c b/src/application.c</span><br><span>index d912eb7..19e089b 100644</span><br><span>--- a/src/application.c</span><br><span>+++ b/src/application.c</span><br><span>@@ -83,6 +83,7 @@</span><br><span> #include <sys/stat.h></span><br><span> </span><br><span> struct log_target *osmo_stderr_target;</span><br><span style="color: hsl(120, 100%, 40%);">+struct log_target *osmo_stdout_target;</span><br><span> </span><br><span> static void sighup_hdlr(int signal)</span><br><span> {</span><br><span>@@ -117,7 +118,7 @@</span><br><span>      return osmo_init_logging2(NULL, log_info);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int osmo_init_logging2(void *ctx, const struct log_info *log_info)</span><br><span style="color: hsl(120, 100%, 40%);">+static int _init_logging_std(void *ctx, const struct log_info *log_info)</span><br><span> {</span><br><span>         static int logging_initialized = 0;</span><br><span> </span><br><span>@@ -126,15 +127,52 @@</span><br><span> </span><br><span>  logging_initialized = 1;</span><br><span>     log_init(log_info, ctx);</span><br><span style="color: hsl(0, 100%, 40%);">-        osmo_stderr_target = log_target_create_stderr();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct log_target *_add_logging_std(struct log_target *std)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!std)</span><br><span style="color: hsl(120, 100%, 40%);">+             return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        log_add_target(std);</span><br><span style="color: hsl(120, 100%, 40%);">+  log_set_all_filter(std, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return std;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_init_logging_stdout(void *ctx, const struct log_info *log_info)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int rc = _init_logging_std(ctx, log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_stdout_target = _add_logging_std(log_target_create_stdout());</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!osmo_stdout_target)</span><br><span style="color: hsl(120, 100%, 40%);">+              return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_init_logging_stderr(void *ctx, const struct log_info *log_info)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc = _init_logging_std(ctx, log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_stderr_target = _add_logging_std(log_target_create_stderr());</span><br><span>   if (!osmo_stderr_target)</span><br><span>             return -1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  log_add_target(osmo_stderr_target);</span><br><span style="color: hsl(0, 100%, 40%);">-     log_set_all_filter(osmo_stderr_target, 1);</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_init_logging2(void *ctx, const struct log_info *log_info)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return osmo_init_logging_stderr(ctx, log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Turn the current process into a background daemon</span><br><span>  *</span><br><span>  * This function will fork the process, exit the parent and set umask,</span><br><span>diff --git a/tests/logging/logging_vty_test.c b/tests/logging/logging_vty_test.c</span><br><span>index 806a460..0bdb11d 100644</span><br><span>--- a/tests/logging/logging_vty_test.c</span><br><span>+++ b/tests/logging/logging_vty_test.c</span><br><span>@@ -242,6 +242,11 @@</span><br><span> </span><br><span>        osmo_init_logging2(root_ctx, &log_info);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      if (osmo_init_logging_stderr(root_ctx, &log_info) == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DLGLOBAL, LOGL_FATAL, "Subsequent logging init has not failed!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return 3;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  vty_commands_init();</span><br><span> </span><br><span>     handle_options(argc, argv);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12094">change 12094</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12094"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I0fe8dc4a41aba4e4509540266e229700e8ec083c </div>
<div style="display:none"> Gerrit-Change-Number: 12094 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>