Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LTTNG_UST_TRACELOG(3)		  LTTng Manual		   LTTNG_UST_TRACELOG(3)

NAME
     lttng_ust_tracelog,  lttng_ust_vtracelog  - LTTng-UST printf(3)-like inter-
     face with a log level

SYNOPSIS
     #include <lttng/tracelog.h>

     #define lttng_ust_tracelog(level, fmt, ...)
     #define lttng_ust_vtracelog(level, fmt, ap)

     Link with:

     *	 -llttng-ust

     *	 If you define _LGPL_SOURCE  before  including	<lttng/tracelog.h>  (di-
	 rectly or indirectly): -llttng-ust-common

DESCRIPTION
     The LTTng-UST lttng_ust_tracelog() and lttng_ust_vtracelog() API allows you
     to  trace	your  application  with  the  help  of simple printf(3)-like and
     vprintf(3)-like macros, with an additional parameter for  the  desired  log
     level.

     The  fmt  argument is passed directly as the fmt parameter of vasprintf(3),
     as well as:

     For lttng_ust_tracelog()
	 The optional parameters following fmt.

     For lttng_ust_vtracelog()
	 The ap parameter as the ap parameter of vasprintf(3) (va_list type).

     The purpose of lttng_ust_tracelog() and lttng_ust_vtracelog()  is	to  ease
     the migration from logging to tracing.

     The available values for the level parameter are:

     LTTNG_UST_TRACEPOINT_LOGLEVEL_EMERG
	 System is unusable.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_ALERT
	 Action must be taken immediately.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_CRIT
	 Critical conditions.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_ERR
	 Error conditions.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_WARNING
	 Warning conditions.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_NOTICE
	 Normal, but significant, condition.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_INFO
	 Informational message.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_SYSTEM
	 Debug information with system-level scope (set of programs).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_PROGRAM
	 Debug information with program-level scope (set of processes).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_PROCESS
	 Debug information with process-level scope (set of modules).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_MODULE
	 Debug	information  with  module  (executable/library)  scope	(set  of
	 units).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_UNIT
	 Debug information with compilation unit scope (set of functions).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_FUNCTION
	 Debug information with function-level scope.

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG_LINE
	 Debug information with line-level scope (default log level).

     LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG
	 Debug-level message.

     To  use  lttng_ust_tracelog()  or	 lttng_ust_vtracelog(),   include   <lt-
     tng/tracelog.h> where you need it, and link your application with liblttng-
     ust  and  liblttng-ust-common. See the EXAMPLE section below for a complete
     usage example.

     Once your application is instrumented with lttng_ust_tracelog() and/or  lt-
     tng_ust_vtracelog()  calls  and  ready to run, use lttng-enable-event(1) to
     enable the lttng_ust_tracelog:* event. You can isolate specific log  levels
     with the --loglevel and --loglevel-only options of this command.

     The  lttng_ust_tracelog() and lttng_ust_vtracelog() events contain the fol-
     lowing fields:
     +------------+-----------------------------+
     | Field name | Description 		|
     +------------+-----------------------------+
     |		  |				|
     | line	  | Line in source  file  where |
     |		  | lttng_ust_tracelog()    was |
     |		  | called.			|
     +------------+-----------------------------+
     |		  |				|
     | file	  | Source file from which  lt- |
     |		  | tng_ust_tracelog()	    was |
     |		  | called.			|
     +------------+-----------------------------+
     |		  |				|
     | func	  | Function  name  from  which |
     |		  | lttng_ust_tracelog()    was |
     |		  | called.			|
     +------------+-----------------------------+
     |		  |				|
     | msg	  | Formatted string output.	|
     +------------+-----------------------------+

     If  you  do  not  need  to  attach  a  specific  log   level   to	 a   lt-
     tng_ust_tracelog()/lttng_ust_vtracelog()  call, use lttng_ust_tracef(3) in-
     stead.

     See also the LIMITATIONS section below for important  limitations	to  con-
     sider when using lttng_ust_tracelog() or lttng_ust_vtracelog().

EXAMPLE
     Here's a usage example of lttng_ust_tracelog():

	 #include <stdlib.h>
	 #include <lttng/tracelog.h>

	 int main(int argc, char *argv[])
	 {
	     int i;

	     if (argc < 2) {
		 lttng_ust_tracelog(LTTNG_UST_TRACEPOINT_LOGLEVEL_CRIT,
				    "Not enough arguments: %d", argc);
		 return EXIT_FAILURE;
	     }

	     lttng_ust_tracelog(LTTNG_UST_TRACEPOINT_LOGLEVEL_INFO,
				"Starting app with %d arguments", argc);

	     for (i = 0; i < argc; i++) {
		 lttng_ust_tracelog(LTTNG_UST_TRACEPOINT_LOGLEVEL_DEBUG,
				    "Argument %d: %s", i, argv[i]);
	     }

	     lttng_ust_tracelog(LTTNG_UST_TRACEPOINT_LOGLEVEL_INFO,
				"Exiting app");
	     return EXIT_SUCCESS;
	 }

     This  C  source  file,  saved as app.c, can be compiled into a program like
     this:

	 $ cc -o app app.c -llttng-ust -llttng-ust-common

     You  can  create  an  LTTng   tracing   session,	enable	 all   the   lt-
     tng_ust_tracelog() events, and start the created tracing session like this:

	 $ lttng create my-session
	 $ lttng enable-event --userspace 'lttng_ust_tracelog:*'
	 $ lttng start

     Or you can enable lttng_ust_tracelog() events matching a log level at least
     as severe as a given log level:

	 $ lttng enable-event --userspace 'lttng_ust_tracelog:*' \
			      --loglevel=INFO

     Next, start the program to be traced:

	 $ ./app a few arguments passed to this application

     Finally, stop the tracing session, and inspect the recorded events:

	 $ lttng stop
	 $ lttng view

LIMITATIONS
     The  lttng_ust_tracelog() and lttng_ust_vtracelog() utility macros were de-
     veloped to make user space tracing super simple, albeit with notable disad-
     vantages compared to custom, full-fledged tracepoint providers:

     *	 All generated events have the same provider/event names.

     *	 There's no static type checking.

     *	 The only event field with user data you actually get, named msg,  is  a
	 string  potentially containing the values you passed to the macro using
	 your own format. This also means that you cannot use filtering using  a
	 custom expression at run time because there are no isolated fields.

     *	 Since lttng_ust_tracelog() and lttng_ust_vtracelog() use C standard li-
	 brary's  vasprintf(3)	function in the background to format the strings
	 at run time, their expected performance is lower than using custom tra-
	 cepoint providers with typed fields, which do not require a  conversion
	 to a string.

     *	 Generally,  a	string containing the textual representation of the user
	 data fields is not as compact as binary fields in the resulting trace.

     Thus, lttng_ust_tracelog()/lttng_ust_vtracelog() are useful for quick  pro-
     totyping  and debugging, but should not be considered for any permanent/se-
     rious application instrumentation.

     lttng_ust_vtracelog()  does  not  have  a	 STAP_PROBEV()	 call,	 because
     STAP_PROBEV()  does  not  support	va_list. If you need it, you should emit
     this call yourself.

     See lttng-ust(3) to learn more about custom tracepoint providers.

BUGS
     If you encounter any issue or usability problem, please report  it  on  the
     LTTng bug tracker <https://bugs.lttng.org/projects/lttng-ust>.

RESOURCES
     *	 LTTng project website <http://lttng.org>

     *	 LTTng documentation <http://lttng.org/docs>

     *	 Git repositories <http://git.lttng.org>

     *	 GitHub organization <http://github.com/lttng>

     *	 Continuous integration <http://ci.lttng.org/>

     *	 Mailing  list <http://lists.lttng.org> for support and development: lt-
	 tng-dev@lists.lttng.org

     *	 IRC channel <irc://irc.oftc.net/lttng>: #lttng on irc.oftc.net

COPYRIGHTS
     This macro is part of the LTTng-UST project.

     This macro is distributed under the GNU Lesser General Public License, ver-
     sion 2.1  <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html>.  See
     the  COPYING  <https://github.com/lttng/lttng-ust/blob/v2.13/COPYING>  file
     for more details.

THANKS
     Thanks to Ericsson for funding this work, providing  real-life  use  cases,
     and testing.

     Special   thanks	to   Michel   Dagenais	 and   the   DORSAL   laboratory
     <http://www.dorsal.polymtl.ca/> at Ecole Polytechnique de Montreal for  the
     LTTng journey.

AUTHORS
     LTTng-UST was originally written by Mathieu Desnoyers, with additional con-
     tributions from various other people. It is currently maintained by Mathieu
     Desnoyers <mailto:mathieu.desnoyers@efficios.com>.

SEE ALSO
     lttng_ust_tracef(3),    lttng_ust_vtracef(3),    lttng-ust(3),    lttng(1),
     printf(3)

LTTng 2.13.9			   08/02/2026		   LTTNG_UST_TRACELOG(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=lttng_ust_tracelog&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help