#include #include #include namespace sp { void Log::info(const char *format, ...) { va_list vl; va_start(vl, format); writeln(T_INFO, format, vl); va_end(vl); } void Log::warn(const char *format, ...) { va_list vl; va_start(vl, format); writeln(T_WARNING, format, vl); va_end(vl); } int Log::error(const char *format, ...) { va_list vl; va_start(vl, format); writeln(T_ERROR, format, vl); va_end(vl); return 1; } void Log::debug(const char *format, ...) { #ifdef SPECTRE_DEBUG va_list vl; va_start(vl, format); writeln(T_DEBUG, format, vl); va_end(vl); #endif /* SPECTRE_DEBUG */ } void Log::writeln(Type type, const char *format, va_list args) { FILE *fd = stderr; static char buf[4096]; const char *prefix; switch(type) { case T_INFO : fd = stdout; prefix = "INFO"; break; case T_WARNING : prefix = "WARN"; break; case T_CRITICAL: prefix = "CRIT"; break; #ifdef SPECTRE_DEBUG case T_DEBUG: prefix = "DEBUG"; break; #endif /* SPECTRE_DEBUG */ case T_ERROR : default : prefix = "ERROR"; break; } vsnprintf(buf, sizeof(buf), format, args); fprintf(fd, "%s: %s\n", prefix, buf); } } // namespace sp