From 9ccf5bffe360def72c8f96340a524fdd672354ec Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 25 Jun 2012 11:43:03 -0600 Subject: mesa: new MESA_LOG_FILE env var to log errors, warnings, etc., to a file Reviewed-by: Jose Fonseca --- docs/envvars.html | 2 ++ src/mesa/main/errors.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/envvars.html b/docs/envvars.html index fffb50a4718..102ea287eb8 100644 --- a/docs/envvars.html +++ b/docs/envvars.html @@ -42,6 +42,8 @@ sometimes be useful for debugging end-user issues. printed to stderr.
If the value of MESA_DEBUG is 'FP' floating point arithmetic errors will generate exceptions. +
  • MESA_LOG_FILE - specifies a file name for logging all errors, warnings, +etc., rather than stderr
  • MESA_TEX_PROG - if set, implement conventional texture env modes with fragment programs (intended for developers only)
  • MESA_TNL_PROG - if set, implement conventional vertex transformation diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c index 69dbb65cf40..ef78a0bca46 100644 --- a/src/mesa/main/errors.c +++ b/src/mesa/main/errors.c @@ -801,12 +801,21 @@ output_if_debug(const char *prefixString, const char *outputString, GLboolean newline) { static int debug = -1; + static FILE *fout = NULL; /* Init the local 'debug' var once. * Note: the _mesa_init_debug() function should have been called * by now so MESA_DEBUG_FLAGS will be initialized. */ if (debug == -1) { + /* If MESA_LOG_FILE env var is set, log Mesa errors, warnings, + * etc to the named file. Otherwise, output to stderr. + */ + const char *logFile = _mesa_getenv("MESA_LOG_FILE"); + if (logFile) + fout = fopen(logFile, "w"); + if (!fout) + fout = stderr; #ifdef DEBUG /* in debug builds, print messages unless MESA_DEBUG="silent" */ if (MESA_DEBUG_FLAGS & DEBUG_SILENT) @@ -821,9 +830,10 @@ output_if_debug(const char *prefixString, const char *outputString, /* Now only print the string if we're required to do so. */ if (debug) { - fprintf(stderr, "%s: %s", prefixString, outputString); + fprintf(fout, "%s: %s", prefixString, outputString); if (newline) - fprintf(stderr, "\n"); + fprintf(fout, "\n"); + fflush(fout); #if defined(_WIN32) && !defined(_WIN32_WCE) /* stderr from windows applications without console is not usually -- cgit v1.2.3