diff options
author | Quentin Young <qlyoung@nvidia.com> | 2020-09-15 00:05:47 +0200 |
---|---|---|
committer | Quentin Young <qlyoung@nvidia.com> | 2020-10-23 21:13:51 +0200 |
commit | 1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989 (patch) | |
tree | 514d607e86217ee2799578498e3522d2ca49a46a /lib/zlog.c | |
parent | lib: add tracepoints for hash ops, thread events (diff) | |
download | frr-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 'lib/zlog.c')
-rw-r--r-- | lib/zlog.c | 29 |
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 |