<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12386">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add LOGPFSMSL(), LOGPFSMSLSRC()<br><br>Using an FSM instace's logging context is very useful. Sometimes it makes sense<br>to log something on a different logging category than the FSM definition's<br>default category.<br><br>For example, an MSC conn has aspects concerning MM, CC, RR, MGCP, ..., and<br>currently all of those log on DMM.<br><br>This came up in I358cfbaf0f44f25148e8b9bafcb9257b1952b35a, where I want to log<br>an MGCP event using a ran_conn context, and used the conn->fi->id. That of<br>course omits context like the current conn FSM state...<br><br>I remember at least one other place where I recently added logging using some<br>fi->id as context, so it might turn out useful in various places.<br><br>Change-Id: I11b182a03f5ecb6df7cd8f260757d3626c8e945d<br>---<br>M include/osmocom/core/fsm.h<br>1 file changed, 30 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/86/12386/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h</span><br><span>index 5b43e56..3c35c20 100644</span><br><span>--- a/include/osmocom/core/fsm.h</span><br><span>+++ b/include/osmocom/core/fsm.h</span><br><span>@@ -119,6 +119,34 @@</span><br><span> </span><br><span> void osmo_fsm_log_addr(bool log_addr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Log using FSM instance's context, on explicit logging subsystem and level.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param fi  An osmo_fsm_inst.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param subsys  A logging subsystem, e.g. DLGLOBAL.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param level  A logging level, e.g. LOGL_INFO.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param fmt  printf-like string format.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param args  String format arguments.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGPFSMSL(fi, subsys, level, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPFSMSLSRC(fi, subsys, level, __FILE__, __LINE__, fmt, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Log using FSM instance's context, on explicit logging subsystem and level,</span><br><span style="color: hsl(120, 100%, 40%);">+ * and passing explicit source file and line information.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param fi  An osmo_fsm_inst.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param subsys  A logging subsystem, e.g. DLGLOBAL.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param level  A logging level, e.g. LOGL_INFO.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param caller_file  A string constant containing a source file path, like __FILE__.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param caller_line  A number constant containing a source file line, like __LINE__.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param fmt  printf-like string format.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param args  String format arguments.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGPFSMSLSRC(fi, subsys, level, caller_file, caller_line, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPSRC(subsys, level, \</span><br><span style="color: hsl(120, 100%, 40%);">+                      caller_file, caller_line, \</span><br><span style="color: hsl(120, 100%, 40%);">+                   "%s{%s}: " fmt, \</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_fsm_inst_name(fi), \</span><br><span style="color: hsl(120, 100%, 40%);">+                     (fi) ? osmo_fsm_state_name((fi)->fsm, (fi)->state) : "fi=NULL", ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Log using FSM instance's context, on explicit logging level.</span><br><span>  * \param fi  An osmo_fsm_inst.</span><br><span>  * \param level  A logging level, e.g. LOGL_INFO.</span><br><span>@@ -138,12 +166,8 @@</span><br><span>  * \param args  String format arguments.</span><br><span>  */</span><br><span> #define LOGPFSMLSRC(fi, level, caller_file, caller_line, fmt, args...) \</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGPSRC((fi) ? (fi)->fsm->log_subsys : DLGLOBAL, level, \</span><br><span style="color: hsl(0, 100%, 40%);">-                 caller_file, caller_line, \</span><br><span style="color: hsl(0, 100%, 40%);">-                     "%s{%s}: " fmt, \</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_fsm_inst_name(fi), \</span><br><span style="color: hsl(0, 100%, 40%);">-                       (fi) ? osmo_fsm_state_name((fi)->fsm, (fi)->state) : "fi=NULL", \</span><br><span style="color: hsl(0, 100%, 40%);">-                       ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPFSMSLSRC(fi, (fi) ? (fi)->fsm->log_subsys : DLGLOBAL, level, \</span><br><span style="color: hsl(120, 100%, 40%);">+                           caller_file, caller_line, fmt, ## args)</span><br><span> </span><br><span> /*! Log using FSM instance's context.</span><br><span>  * The log level to log on is obtained from the FSM instance.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12386">change 12386</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/12386"/><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: I11b182a03f5ecb6df7cd8f260757d3626c8e945d </div>
<div style="display:none"> Gerrit-Change-Number: 12386 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>