summaryrefslogtreecommitdiffstats
path: root/lib/zlog.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@nvidia.com>2020-09-15 00:05:47 +0200
committerQuentin Young <qlyoung@nvidia.com>2020-10-23 21:13:51 +0200
commit1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989 (patch)
tree514d607e86217ee2799578498e3522d2ca49a46a /lib/zlog.c
parentlib: add tracepoints for hash ops, thread events (diff)
downloadfrr-1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989.tar.xz
frr-1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989.zip
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 '')
-rw-r--r--lib/zlog.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/zlog.c b/lib/zlog.c
index 8dfd20371..f28ff0861 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