From 75c5ad79cbdc0b7d0579ccd1c97902ded5bdc08a Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 1 Feb 2012 17:54:50 -0500 Subject: [PATCH] Pre-assign fixed loglevels Some early LTTng-UST adopters brought to my attention that the way tracepoint loglevels are currently specified in LTTng-UST might be too relax for its own good. If each application define their own loglevel names/values, it will become difficult to use the loglevels to select "trace verbosity" in a system-wide manner. Now that I come to think of it, it might make sense to pre-define a set of supported loglevels, similarly to syslog(3). However, given that tracing sometimes targets debug levels that are more fine-grained than in the case of logs, I would propose to split the "debug" loglevel into sub-categories. My current thought is to simply just allow these loglevels. I doubt that letting application developers specify extra loglevels on top of this would be that useful, and it would certainly be more confusing. In the list below, lower numbers means "low verbosity", higher numbers means "high verbosity, debug-style information". Signed-off-by: Mathieu Desnoyers --- include/lttng/tracepoint.h | 103 ++++++++++++++++----------- include/lttng/ust-tracepoint-event.h | 37 ++++++++-- tests/demo/ust_tests_demo.h | 10 +-- tests/demo/ust_tests_demo2.h | 8 +-- tests/demo/ust_tests_demo3.h | 8 +-- 5 files changed, 98 insertions(+), 68 deletions(-) diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 22216973..9f36d39a 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -345,54 +345,75 @@ static void __attribute__((destructor)) __tracepoints__destroy(void) #ifndef TRACEPOINT_LOGLEVEL /* - * Tracepoint Loglevel Declaration Facility - * - * This is a place-holder the tracepoint loglevel declaration, - * overridden by the tracer implementation. + * Tracepoint Loglevels * * Typical use of these loglevels: * - * 1) Declare the mapping between loglevel names and an integer values - * within TRACEPOINT_LOGLEVEL_ENUM(), using tp_loglevel() for each - * tuple. Do _NOT_ add comma (,) nor semicolon (;) between the - * tp_loglevel entries contained within TRACEPOINT_LOGLEVEL_ENUM(). - * Do _NOT_ add comma (,) nor semicolon (;) after the - * TRACEPOINT_LOGLEVEL_ENUM() declaration. The name should be a - * proper C99 identifier. - * - * TRACEPOINT_LOGLEVEL_ENUM( - * tp_loglevel( < loglevel_name >, < value > ) - * tp_loglevel( < loglevel_name >, < value > ) - * ... - * ) - * - * e.g.: - * - * TRACEPOINT_LOGLEVEL_ENUM( - * tp_loglevel(LOG_EMERG, 0) - * tp_loglevel(LOG_ALERT, 1) - * tp_loglevel(LOG_CRIT, 2) - * tp_loglevel(LOG_ERR, 3) - * tp_loglevel(LOG_WARNING, 4) - * tp_loglevel(LOG_NOTICE, 5) - * tp_loglevel(LOG_INFO, 6) - * tp_loglevel(LOG_DEBUG, 7) - * ) - * - * 2) Then, declare tracepoint loglevels for tracepoints. A - * TRACEPOINT_EVENT should be declared prior to the the - * TRACEPOINT_LOGLEVEL for a given tracepoint name. The first field - * is the name of the tracepoint, the second field is the loglevel - * name. + * The loglevels go from 0 to 15. Higher numbers imply the most + * verbosity (higher event throughput expected. + * + * Loglevels 0 through 6, and loglevel 15, match syslog(3) loglevels + * semantic. Loglevels 7 through 14 offer more fine-grained selection of + * traced information. + * + * TRACE_EMERG 0 + * system is unusable + * + * TRACE_ALERT 1 + * action must be taken immediately + * + * TRACE_CRIT 2 + * critical conditions + * + * TRACE_ERR 3 + * error conditions + * + * TRACE_WARNING 4 + * warning conditions + * + * TRACE_NOTICE 5 + * normal, but significant, condition + * + * TRACE_INFO 6 + * informational message + * + * TRACE_DEBUG_SYSTEM 7 + * information has system-level scope + * + * TRACE_PROCESS 8 + * information has process-level scope + * + * TRACE_MODULE 9 + * information has module (executable/library) scope + * + * TRACE_UNIT 10 + * information has compilation unit scope + * + * TRACE_CLASS 11 + * information has class-level scope + * + * TRACE_OBJECT 12 + * information has object-level scope + * + * TRACE_FUNCTION 13 + * information has function-level scope + * + * TRACE_PRINTF 14 + * tracepoint_printf message + * + * TRACE_DEBUG 15 + * debug-level message + * + * Declare tracepoint loglevels for tracepoints. A TRACEPOINT_EVENT + * should be declared prior to the the TRACEPOINT_LOGLEVEL for a given + * tracepoint name. The first field is the name of the tracepoint, the + * second field is the loglevel name. * * TRACEPOINT_LOGLEVEL(< [com_company_]project[_component] >, < event >, * < loglevel_name >) * - * The TRACEPOINT_PROVIDER must be defined when declaring a - * TRACEPOINT_LOGLEVEL_ENUM and TRACEPOINT_LOGLEVEL. The tracepoint - * loglevel enumeration apply to the entire TRACEPOINT_PROVIDER. Only one - * tracepoint loglevel enumeration should be declared per tracepoint - * provider. + * The TRACEPOINT_PROVIDER must be already declared before declaring a + * TRACEPOINT_LOGLEVEL. */ #define TRACEPOINT_LOGLEVEL_ENUM(...) diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 58c46d80..0bdc35be 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -453,7 +453,22 @@ static const struct tracepoint_loglevel_entry \ .value = (_value), \ }; -#include TRACEPOINT_INCLUDE +tp_loglevel(TRACE_EMERG, 0) +tp_loglevel(TRACE_ALERT, 1) +tp_loglevel(TRACE_CRIT, 2) +tp_loglevel(TRACE_ERR, 3) +tp_loglevel(TRACE_WARNING, 4) +tp_loglevel(TRACE_NOTICE, 5) +tp_loglevel(TRACE_INFO, 6) +tp_loglevel(TRACE_SYSTEM, 7) +tp_loglevel(TRACE_PROCESS, 8) +tp_loglevel(TRACE_MODULE, 9) +tp_loglevel(TRACE_UNIT, 10) +tp_loglevel(TRACE_CLASS, 11) +tp_loglevel(TRACE_OBJECT, 12) +tp_loglevel(TRACE_FUNCTION, 13) +tp_loglevel(TRACE_PRINTF, 14) +tp_loglevel(TRACE_DEBUG, 15) /* * Stage 6.2 of tracepoint event generation. @@ -464,15 +479,27 @@ static const struct tracepoint_loglevel_entry \ /* Reset all macros within TRACEPOINT_EVENT */ #include -#undef TRACEPOINT_LOGLEVEL_ENUM -#define TRACEPOINT_LOGLEVEL_ENUM(...) __VA_ARGS__ - #undef tp_loglevel #define tp_loglevel(_identifier, _value) \ &_TP_COMBINE_TOKENS4(__tp_loglevel_entry__, TRACEPOINT_PROVIDER, ___, _identifier), \ static const struct tracepoint_loglevel_entry *_TP_COMBINE_TOKENS(__tracepoint_loglevel_enum__, TRACEPOINT_PROVIDER)[] = { -#include TRACEPOINT_INCLUDE + tp_loglevel(TRACE_EMERG, 0) + tp_loglevel(TRACE_ALERT, 1) + tp_loglevel(TRACE_CRIT, 2) + tp_loglevel(TRACE_ERR, 3) + tp_loglevel(TRACE_WARNING, 4) + tp_loglevel(TRACE_NOTICE, 5) + tp_loglevel(TRACE_INFO, 6) + tp_loglevel(TRACE_SYSTEM, 7) + tp_loglevel(TRACE_PROCESS, 8) + tp_loglevel(TRACE_MODULE, 9) + tp_loglevel(TRACE_UNIT, 10) + tp_loglevel(TRACE_CLASS, 11) + tp_loglevel(TRACE_OBJECT, 12) + tp_loglevel(TRACE_FUNCTION, 13) + tp_loglevel(TRACE_PRINTF, 14) + tp_loglevel(TRACE_DEBUG, 15) }; /* diff --git a/tests/demo/ust_tests_demo.h b/tests/demo/ust_tests_demo.h index 355867d2..7740d98c 100644 --- a/tests/demo/ust_tests_demo.h +++ b/tests/demo/ust_tests_demo.h @@ -23,19 +23,13 @@ extern "C" { #include -TRACEPOINT_LOGLEVEL_ENUM( - tp_loglevel(critical, 0) - tp_loglevel(warning, 1) - tp_loglevel(debug, 2) -) - TRACEPOINT_EVENT(ust_tests_demo, starting, TP_ARGS(int, value), TP_FIELDS( ctf_integer(int, value, value) ) ) -TRACEPOINT_LOGLEVEL(ust_tests_demo, starting, critical) +TRACEPOINT_LOGLEVEL(ust_tests_demo, starting, TRACE_CRIT) TRACEPOINT_EVENT(ust_tests_demo, done, TP_ARGS(int, value), @@ -43,7 +37,7 @@ TRACEPOINT_EVENT(ust_tests_demo, done, ctf_integer(int, value, value) ) ) -TRACEPOINT_LOGLEVEL(ust_tests_demo, done, critical) +TRACEPOINT_LOGLEVEL(ust_tests_demo, done, TRACE_CRIT) #endif /* _TRACEPOINT_UST_TESTS_DEMO_H */ diff --git a/tests/demo/ust_tests_demo2.h b/tests/demo/ust_tests_demo2.h index 3cadfa8c..a763e028 100644 --- a/tests/demo/ust_tests_demo2.h +++ b/tests/demo/ust_tests_demo2.h @@ -23,12 +23,6 @@ extern "C" { #include -TRACEPOINT_LOGLEVEL_ENUM( - tp_loglevel(other, 0) - tp_loglevel(other2, 1) - tp_loglevel(other3, 2) -) - TRACEPOINT_EVENT(ust_tests_demo2, loop, TP_ARGS(int, anint, int, netint, long *, values, char *, text, size_t, textlen, @@ -50,7 +44,7 @@ TRACEPOINT_EVENT(ust_tests_demo2, loop, ctf_float(double, doublefield, doublearg) ) ) -TRACEPOINT_LOGLEVEL(ust_tests_demo2, loop, other3) +TRACEPOINT_LOGLEVEL(ust_tests_demo2, loop, TRACE_WARNING) #endif /* _TRACEPOINT_UST_TESTS_DEMO2_H */ diff --git a/tests/demo/ust_tests_demo3.h b/tests/demo/ust_tests_demo3.h index 71241ec6..aaa5a0f8 100644 --- a/tests/demo/ust_tests_demo3.h +++ b/tests/demo/ust_tests_demo3.h @@ -23,19 +23,13 @@ extern "C" { #include -TRACEPOINT_LOGLEVEL_ENUM( - tp_loglevel(test0, 0) - tp_loglevel(test1, 1) - tp_loglevel(test2, 2) -) - TRACEPOINT_EVENT(ust_tests_demo3, done, TP_ARGS(int, value), TP_FIELDS( ctf_integer(int, value, value) ) ) -TRACEPOINT_LOGLEVEL(ust_tests_demo3, done, test1) +TRACEPOINT_LOGLEVEL(ust_tests_demo3, done, TRACE_WARNING) #endif /* _TRACEPOINT_UST_TESTS_DEMO3_H */ -- 2.34.1