mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-12 10:25:33 +00:00
info: write debugging output to file if GST_DEBUG_FILE environment variable is set
This changes behaviour slightly in that we no longer output things via g_printerr(), so any non-standard glib printerr handlers are no longer called when GST_DEBUG is enabled. However, this seems not really desirable in most cases anyway, and the GLib docs also say that libraries should not use g_printerr() for logging. Other stderr output (e.g. warnings, or application messages) will of course not be captured in the log file this way. GST_DEBUG_FILE=- will redirect debug output to stdout.
This commit is contained in:
parent
21c8edca2a
commit
9d4caf8d8c
1 changed files with 32 additions and 10 deletions
|
@ -99,6 +99,8 @@
|
||||||
# include <printf.h>
|
# include <printf.h>
|
||||||
#endif
|
#endif
|
||||||
#include <stdio.h> /* fprintf */
|
#include <stdio.h> /* fprintf */
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
#include <errno.h>
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
# include <unistd.h> /* getpid on UNIX */
|
# include <unistd.h> /* getpid on UNIX */
|
||||||
#endif
|
#endif
|
||||||
|
@ -264,6 +266,8 @@ static gboolean pretty_tags = PRETTY_TAGS_DEFAULT;
|
||||||
static gint __default_level;
|
static gint __default_level;
|
||||||
static gint __use_color;
|
static gint __use_color;
|
||||||
|
|
||||||
|
static FILE *log_file;
|
||||||
|
|
||||||
/* FIXME: export this? */
|
/* FIXME: export this? */
|
||||||
gboolean
|
gboolean
|
||||||
_priv_gst_in_valgrind (void)
|
_priv_gst_in_valgrind (void)
|
||||||
|
@ -308,6 +312,22 @@ _gst_debug_init (void)
|
||||||
{
|
{
|
||||||
const gchar *env;
|
const gchar *env;
|
||||||
|
|
||||||
|
env = g_getenv ("GST_DEBUG_FILE");
|
||||||
|
if (env != NULL && *env != '\0') {
|
||||||
|
if (strcmp (env, "-") == 0) {
|
||||||
|
log_file = stdout;
|
||||||
|
} else {
|
||||||
|
log_file = g_fopen (env, "w");
|
||||||
|
if (log_file == NULL) {
|
||||||
|
g_printerr ("Could not open log file '%s' for writing: %s\n", env,
|
||||||
|
g_strerror (errno));
|
||||||
|
log_file = stderr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log_file = stderr;
|
||||||
|
}
|
||||||
|
|
||||||
g_atomic_int_set (&__default_level, GST_LEVEL_DEFAULT);
|
g_atomic_int_set (&__default_level, GST_LEVEL_DEFAULT);
|
||||||
g_atomic_int_set (&__use_color, 1);
|
g_atomic_int_set (&__use_color, 1);
|
||||||
|
|
||||||
|
@ -871,7 +891,9 @@ static const gchar *levelcolormap[GST_LEVEL_COUNT] = {
|
||||||
*
|
*
|
||||||
* The default logging handler used by GStreamer. Logging functions get called
|
* The default logging handler used by GStreamer. Logging functions get called
|
||||||
* whenever a macro like GST_DEBUG or similar is used. This function outputs the
|
* whenever a macro like GST_DEBUG or similar is used. This function outputs the
|
||||||
* message and additional info using the glib error handler.
|
* message and additional info to stderr (or the log file specified via the
|
||||||
|
* GST_DEBUG_FILE environment variable).
|
||||||
|
*
|
||||||
* You can add other handlers by using gst_debug_add_log_function().
|
* You can add other handlers by using gst_debug_add_log_function().
|
||||||
* And you can remove this handler by calling
|
* And you can remove this handler by calling
|
||||||
* gst_debug_remove_log_function(gst_debug_log_default);
|
* gst_debug_remove_log_function(gst_debug_log_default);
|
||||||
|
@ -916,7 +938,7 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
|
||||||
levelcolor = levelcolormap[level];
|
levelcolor = levelcolormap[level];
|
||||||
|
|
||||||
#define PRINT_FMT " %s"PID_FMT"%s "PTR_FMT" %s%s%s %s"CAT_FMT"%s %s\n"
|
#define PRINT_FMT " %s"PID_FMT"%s "PTR_FMT" %s%s%s %s"CAT_FMT"%s %s\n"
|
||||||
g_printerr ("%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed),
|
g_fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed),
|
||||||
pidcolor, pid, clear, g_thread_self (), levelcolor,
|
pidcolor, pid, clear, g_thread_self (), levelcolor,
|
||||||
gst_debug_level_get_name (level), clear, color,
|
gst_debug_level_get_name (level), clear, color,
|
||||||
gst_debug_category_get_name (category), file, line, function, obj,
|
gst_debug_category_get_name (category), file, line, function, obj,
|
||||||
|
@ -933,31 +955,31 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
|
||||||
SetConsoleTextAttribute (GetStdHandle (STD_ERROR_HANDLE), (c));
|
SetConsoleTextAttribute (GetStdHandle (STD_ERROR_HANDLE), (c));
|
||||||
g_static_mutex_lock (&win_print_mutex);
|
g_static_mutex_lock (&win_print_mutex);
|
||||||
/* timestamp */
|
/* timestamp */
|
||||||
g_printerr ("%" GST_TIME_FORMAT " ", GST_TIME_ARGS (elapsed));
|
g_fprintf (log_file, "%" GST_TIME_FORMAT " ", GST_TIME_ARGS (elapsed));
|
||||||
/* pid */
|
/* pid */
|
||||||
SET_COLOR (available_colors[pid % G_N_ELEMENTS (available_colors)]);
|
SET_COLOR (available_colors[pid % G_N_ELEMENTS (available_colors)]);
|
||||||
g_printerr (PID_FMT, pid);
|
g_fprintf (log_file, PID_FMT, pid);
|
||||||
/* thread */
|
/* thread */
|
||||||
SET_COLOR (clear);
|
SET_COLOR (clear);
|
||||||
g_printerr (" " PTR_FMT " ", g_thread_self ());
|
g_fprintf (log_file, " " PTR_FMT " ", g_thread_self ());
|
||||||
/* level */
|
/* level */
|
||||||
SET_COLOR (levelcolormap[level]);
|
SET_COLOR (levelcolormap[level]);
|
||||||
g_printerr ("%s ", gst_debug_level_get_name (level));
|
g_fprintf (log_file, "%s ", gst_debug_level_get_name (level));
|
||||||
/* category */
|
/* category */
|
||||||
SET_COLOR (gst_debug_construct_win_color (gst_debug_category_get_color
|
SET_COLOR (gst_debug_construct_win_color (gst_debug_category_get_color
|
||||||
(category)));
|
(category)));
|
||||||
g_printerr (CAT_FMT, gst_debug_category_get_name (category),
|
g_fprintf (log_file, CAT_FMT, gst_debug_category_get_name (category),
|
||||||
file, line, function, obj);
|
file, line, function, obj);
|
||||||
/* message */
|
/* message */
|
||||||
SET_COLOR (clear);
|
SET_COLOR (clear);
|
||||||
g_printerr (" %s\n", gst_debug_message_get (message));
|
g_fprintf (log_file, " %s\n", gst_debug_message_get (message));
|
||||||
g_static_mutex_unlock (&win_print_mutex);
|
g_static_mutex_unlock (&win_print_mutex);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
/* no color, all platforms */
|
/* no color, all platforms */
|
||||||
#define PRINT_FMT " "PID_FMT" "PTR_FMT" %s "CAT_FMT" %s\n"
|
#define PRINT_FMT " "PID_FMT" "PTR_FMT" %s "CAT_FMT" %s\n"
|
||||||
g_printerr ("%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed), pid,
|
g_fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed),
|
||||||
g_thread_self (), gst_debug_level_get_name (level),
|
pid, g_thread_self (), gst_debug_level_get_name (level),
|
||||||
gst_debug_category_get_name (category), file, line, function, obj,
|
gst_debug_category_get_name (category), file, line, function, obj,
|
||||||
gst_debug_message_get (message));
|
gst_debug_message_get (message));
|
||||||
#undef PRINT_FMT
|
#undef PRINT_FMT
|
||||||
|
|
Loading…
Reference in a new issue