aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-12-19 23:34:25 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2018-12-21 23:03:53 +0100
commit07b98dc34c87bc23e6692e4d00b8dec94ae86632 (patch)
treef44980561289341eaa875b7aab87836071ca73ff
parent3db8ab6df489d39f656cfbbaafa4e29ad2e3830c (diff)
add LOGPFSMSL(), LOGPFSMSLSRC()neels/logpfsm
Using an FSM instace's logging context is very useful. Sometimes it makes sense to log something on a different logging category than the FSM definition's default category. For example, an MSC conn has aspects concerning MM, CC, RR, MGCP, ..., and currently all of those log on DMM. This came up in I358cfbaf0f44f25148e8b9bafcb9257b1952b35a, where I want to log an MGCP event using a ran_conn context, and used the conn->fi->id. That of course omits context like the current conn FSM state... I remember at least one other place where I recently added logging using some fi->id as context, so it might turn out useful in various places. Change-Id: I11b182a03f5ecb6df7cd8f260757d3626c8e945d
-rw-r--r--include/osmocom/core/fsm.h36
1 files changed, 30 insertions, 6 deletions
diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h
index f1080cde..5bf5328e 100644
--- a/include/osmocom/core/fsm.h
+++ b/include/osmocom/core/fsm.h
@@ -119,6 +119,34 @@ struct osmo_fsm_inst {
void osmo_fsm_log_addr(bool log_addr);
+/*! Log using FSM instance's context, on explicit logging subsystem and level.
+ * \param fi An osmo_fsm_inst.
+ * \param subsys A logging subsystem, e.g. DLGLOBAL.
+ * \param level A logging level, e.g. LOGL_INFO.
+ * \param fmt printf-like format string.
+ * \param args Format string arguments.
+ */
+#define LOGPFSMSL(fi, subsys, level, fmt, args...) \
+ LOGPFSMSLSRC(fi, subsys, level, __FILE__, __LINE__, fmt, ## args)
+
+/*! Log using FSM instance's context, on explicit logging subsystem and level,
+ * and passing explicit source file and line information.
+ * \param fi An osmo_fsm_inst.
+ * \param subsys A logging subsystem, e.g. DLGLOBAL.
+ * \param level A logging level, e.g. LOGL_INFO.
+ * \param caller_file A string constant containing a source file path, like __FILE__.
+ * \param caller_line A number constant containing a source file line, like __LINE__.
+ * \param fmt printf-like format string.
+ * \param args Format string arguments.
+ */
+#define LOGPFSMSLSRC(fi, subsys, level, caller_file, caller_line, fmt, args...) \
+ LOGPSRC(subsys, level, \
+ caller_file, caller_line, \
+ "%s{%s}: " fmt, \
+ osmo_fsm_inst_name(fi), \
+ (fi) ? osmo_fsm_state_name((fi)->fsm, (fi)->state) : "fi=NULL", ## args)
+
+
/*! Log using FSM instance's context, on explicit logging level.
* \param fi An osmo_fsm_inst.
* \param level A logging level, e.g. LOGL_INFO.
@@ -138,12 +166,8 @@ void osmo_fsm_log_addr(bool log_addr);
* \param args Format string arguments.
*/
#define LOGPFSMLSRC(fi, level, caller_file, caller_line, fmt, args...) \
- LOGPSRC((fi) ? (fi)->fsm->log_subsys : DLGLOBAL, level, \
- caller_file, caller_line, \
- "%s{%s}: " fmt, \
- osmo_fsm_inst_name(fi), \
- (fi) ? osmo_fsm_state_name((fi)->fsm, (fi)->state) : "fi=NULL", \
- ## args)
+ LOGPFSMSLSRC(fi, (fi) ? (fi)->fsm->log_subsys : DLGLOBAL, level, \
+ caller_file, caller_line, fmt, ## args)
/*! Log using FSM instance's context.
* The log level to log on is obtained from the FSM instance.