mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 03:27:25 +00:00
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>
This commit is contained in:
parent
abf96a87f3
commit
1bd1ebaa08
@ -107,6 +107,7 @@ THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call)
|
|||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
#include <lttng/tracepoint-event.h>
|
#include <lttng/tracepoint-event.h>
|
||||||
|
#include <lttng/tracelog.h>
|
||||||
|
|
||||||
#else /* HAVE_LTTNG */
|
#else /* HAVE_LTTNG */
|
||||||
|
|
||||||
|
29
lib/zlog.c
29
lib/zlog.c
@ -52,6 +52,7 @@
|
|||||||
#include "printfrr.h"
|
#include "printfrr.h"
|
||||||
#include "frrcu.h"
|
#include "frrcu.h"
|
||||||
#include "zlog.h"
|
#include "zlog.h"
|
||||||
|
#include "trace.h"
|
||||||
|
|
||||||
DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message")
|
DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message")
|
||||||
DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer")
|
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();
|
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)
|
if (zlog_tls)
|
||||||
vzlog_tls(zlog_tls, prio, fmt, ap);
|
vzlog_tls(zlog_tls, prio, fmt, ap);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user