egllog.c revision 20e851bb9a6737194bc0effcb155b2fdb23acaaa
1/** 2 * Logging facility for debug/info messages. 3 */ 4 5 6#include <stdarg.h> 7#include <stdio.h> 8#include <stdlib.h> 9#include <string.h> 10#include "egllog.h" 11 12#define MAXSTRING 1000 13#define FALLBACK_LOG_LEVEL _EGL_DEBUG 14#define FALLBACK_LOG_LEVEL_STR "debug" 15 16static EGLint ReportingLevel = -1; 17 18 19static void 20log_level_initialize (void) 21{ 22 char *log_env = getenv ("EGL_LOG_LEVEL"); 23 24 if (log_env == NULL) { 25 ReportingLevel = FALLBACK_LOG_LEVEL; 26 } 27 else if (strcasecmp (log_env, "fatal") == 0) { 28 ReportingLevel = _EGL_FATAL; 29 } 30 else if (strcasecmp (log_env, "warning") == 0) { 31 ReportingLevel = _EGL_WARNING; 32 } 33 else if (strcasecmp (log_env, "info") == 0) { 34 ReportingLevel = _EGL_INFO; 35 } 36 else if (strcasecmp (log_env, "debug") == 0) { 37 ReportingLevel = _EGL_DEBUG; 38 } 39 else { 40 fprintf (stderr, "Unrecognized EGL_LOG_LEVEL environment variable value. " 41 "Expected one of \"fatal\", \"warning\", \"info\", \"debug\". " 42 "Got \"%s\". Falling back to \"%s\".\n", 43 log_env, FALLBACK_LOG_LEVEL_STR); 44 ReportingLevel = FALLBACK_LOG_LEVEL; 45 } 46} 47 48 49/** 50 * Log a message to stderr. 51 * \param level one of _EGL_FATAL, _EGL_WARNING, _EGL_INFO, _EGL_DEBUG. 52 */ 53void 54_eglLog(EGLint level, const char *fmtStr, ...) 55{ 56 va_list args; 57 char msg[MAXSTRING]; 58 const char *levelStr; 59 static int log_level_initialized = 0; 60 61 if (!log_level_initialized) { 62 log_level_initialize (); 63 log_level_initialized = 1; 64 } 65 66 if (level <= ReportingLevel) { 67 switch (level) { 68 case _EGL_FATAL: 69 levelStr = "Fatal"; 70 break; 71 case _EGL_WARNING: 72 levelStr = "Warning"; 73 break; 74 case _EGL_INFO: 75 levelStr = "Info"; 76 break; 77 case _EGL_DEBUG: 78 levelStr = "Debug"; 79 break; 80 default: 81 levelStr = ""; 82 } 83 84 va_start(args, fmtStr); 85 vsnprintf(msg, MAXSTRING, fmtStr, args); 86 va_end(args); 87 88 fprintf(stderr, "EGL %s: %s\n", levelStr, msg); 89 90 if (level == _EGL_FATAL) { 91 exit(1); /* or abort()? */ 92 } 93 } 94} 95