log

A tracing module that logs all data from all GstTracer hooks. Takes no arguments other than an optional name.

Enabling the log tracer

Enable through an environment variable: GST_TRACERS=log (notice the plural).

You can double check the plugin has been enabled using GST_DEBUG='*:INFO'. You should see:

$ GST_TRACERS="log" GST_DEBUG='*:INFO' \
     gst-launch-1.0 fakesrc num-buffers=1 ! fakesink \
     2>&1 | grep "enabling tracers"
[...] _priv_gst_tracing_init: enabling tracers: 'log'

Using the log tracer

This tracer logs accross a number of categories at the TRACE level.

For this reason, you need to set GST_DEBUG to capture the output from this plugin.

These are the logging categories under which the different hooks operate:

  • GST_DEBUG=GST_BUFFER:TRACE
    • pad-push-pre, pad-push-post
    • pad-pull-range-pre, pad-pull-range-post
  • GST_DEBUG=GST_BUFFER_LIST:TRACE
    • pad-push-list-pre, pad-push-list-post
  • GST_DEBUG=GST_EVENT:TRACE
    • pad-push-event-pre, pad-push-event-post
  • GST_DEBUG=GST_QUERY:TRACE
    • pad-query-pre, pad-query-post
    • element-query-pre, element-query-post
  • GST_DEBUG=GST_MESSAGE:TRACE
    • element-post-message-pre, element-post-message-post
  • GST_DEBUG=GST_ELEMENT_FACTORY:TRACE
    • element-new
  • GST_DEBUG=GST_ELEMENT_PADS:TRACE
    • element-add-pad
    • element-remove-pad
  • GST_DEBUG=GST_STATES:TRACE
    • element-change-state-pre, element-change-state-post
  • GST_DEBUG=GST_BIN:TRACE
    • bin-add-pre, bin-add-post
    • bin-remove-pre, bin-remove-post
  • GST_DEBUG=GST_PADS:TRACE
    • pad-link-pre, pad-link-post
    • pad-unlink-pre, pad-unlink-post

Since the categories mentioned above are not exclusive to this tracer plugin, but are also used by core GStreamer code, you should expect a lot of unrelated logging to appear.

On the other hand, the functions in this plugin have a consistent naming scheme, which should make it easy to filter the logs: do_{hook_name}

Example

As an example, if we wanted to log the flow of events and pads being linked we could run the following command:

$ GST_TRACERS="log" \
      GST_DEBUG=GST_EVENT:TRACE,GST_PADS:TRACE \
      gst-play-1.0 file.webm \
      2>&1 | egrep -w 'do_(pad_link)_(pre|post):'
[...]
[...] GST_PADS :0:do_pad_link_pre:<typefind:src> 0:00:00.096516923, src=<typefind:src>, sink=<matroskademux0:sink>
[...] GST_PADS :0:do_pad_link_post:<typefind:src> 0:00:00.096678191, src=<typefind:src>, sink=<matroskademux0:sink>, res=0
[...] GST_PADS :0:do_pad_link_pre:<matroskademux0:audio_0> 0:00:00.103133773, src=<matroskademux0:audio_0>, sink=<decodepad1:proxypad2>
[...] GST_PADS :0:do_pad_link_post:<matroskademux0:audio_0> 0:00:00.103567148, src=<matroskademux0:audio_0>, sink=<decodepad1:proxypad2>, res=0
[...]
[...] GST_EVENT :0:do_push_event_pre:<vp8dec0:sink> 0:00:00.930848627, pad=<vp8dec0:sink>, event=qos event: 0x7fec9c00c0a0, time 99:99:99.999999999, seq-num 393, GstEventQOS, type=(GstQOSType)overflow, proportion=(double)0.036137789409526271, diff=(gint64)-29350000, timestamp=(guint64)533000000;
[...] GST_EVENT :0:do_push_event_pre:<multiqueue0:sink_1> 0:00:00.930901498, pad=<multiqueue0:sink_1>, event=qos event: 0x7fec9c00c0a0, time 99:99:99.999999999, seq-num 393, GstEventQOS, type=(GstQOSType)overflow, proportion=(double)0.036137789409526271, diff=(gint64)-29350000, timestamp=(guint64)533000000;
[...] GST_EVENT :0:do_push_event_post:<multiqueue0:sink_1> 0:00:00.931041882, pad=<multiqueue0:sink_1>, res=1
[...] GST_EVENT :0:do_push_event_post:<vp8dec0:sink> 0:00:00.931082112, pad=<vp8dec0:sink>, res=1
[...]

The results of the search are