summaryrefslogtreecommitdiff
path: root/lib/zlog.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@nvidia.com>2020-09-14 18:05:47 -0400
committerQuentin Young <qlyoung@nvidia.com>2020-10-23 15:13:51 -0400
commit1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989 (patch)
tree514d607e86217ee2799578498e3522d2ca49a46a /lib/zlog.c
parentabf96a87f3f2f9527885ee78930787ecb4068530 (diff)
lib: generate trace events for log messages
LTTng supports tracef() and tracelog() macros, which work like printf, and are used to ease transition between logging and tracing. Messages printed using these macros end up as trace events. For our uses we are not interested in dropping logging, but it is nice to get log messages in trace output, so I've added a call to tracelog() in zlog that dumps our zlog messages as trace events. Signed-off-by: Quentin Young <qlyoung@nvidia.com>
Diffstat (limited to 'lib/zlog.c')
-rw-r--r--lib/zlog.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/zlog.c b/lib/zlog.c
index 8dfd20371b..f28ff08617 100644
--- a/lib/zlog.c
+++ b/lib/zlog.c
@@ -52,6 +52,7 @@
#include "printfrr.h"
#include "frrcu.h"
#include "zlog.h"
+#include "trace.h"
DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message")
DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer")
@@ -450,6 +451,34 @@ void vzlog(int prio, const char *fmt, va_list ap)
{
struct zlog_tls *zlog_tls = zlog_tls_get();
+#ifdef HAVE_LTTNG
+ va_list copy;
+ va_copy(copy, ap);
+ char *msg = vasprintfrr(MTYPE_LOG_MESSAGE, fmt, copy);
+
+ switch (prio) {
+ case LOG_ERR:
+ tracelog(TRACE_ERR, msg);
+ break;
+ case LOG_WARNING:
+ tracelog(TRACE_WARNING, msg);
+ break;
+ case LOG_DEBUG:
+ tracelog(TRACE_DEBUG, msg);
+ break;
+ case LOG_NOTICE:
+ tracelog(TRACE_DEBUG, msg);
+ break;
+ case LOG_INFO:
+ default:
+ tracelog(TRACE_INFO, msg);
+ break;
+ }
+
+ va_end(copy);
+ XFREE(MTYPE_LOG_MESSAGE, msg);
+#endif
+
if (zlog_tls)
vzlog_tls(zlog_tls, prio, fmt, ap);
else