void NaClLogV_mu(int detail_level, char const *fmt, va_list ap) { if (NACL_VERBOSITY_UNSET == verbosity) { verbosity = NaClLogDefaultLogVerbosity(); } if (detail_level <= verbosity) { NaClLogDoLogV_mu(detail_level, fmt, ap); } }
/* * Output a printf-style formatted message if the log verbosity level * is set higher than the log output's detail level. Note that since * this is not a macro, log message arguments that have side effects * will have their side effects regardless of whether the * corresponding log message is printed or not. This is good from a * consistency point of view, but it means that should a logging * argument be expensive to compute, the log statement needs to be * surrounded by something like * * if (detail_level <= NaClLogGetVerbosity()) { * NaClLog(detail_level, "format string", expensive_arg(), ...); * } * * The log message, if written, is prepended by a microsecond * resolution timestamp on linux and a millisecond resolution * timestamp on windows. This means that if the NaCl app can read its * own logs, it can distinguish which host OS it is running on. */ void NaClLogV_mu(int detail_level, char const *fmt, va_list ap) { struct Gio *s; s = NaClLogGetGio_mu(); if (NACL_VERBOSITY_UNSET == verbosity) { verbosity = NaClLogDefaultLogVerbosity(); } if (detail_level <= verbosity) { NaClLogOutputTag_mu(s); (void) gvprintf(s, fmt, ap); (void) (*s->vtbl->Flush)(s); } if (LOG_FATAL == detail_level) { abort_on_unlock = 1; } }
void NaClLogModuleInit(void) { NaClLogModuleInitExtended(NaClLogDefaultLogVerbosity(), NaClLogDefaultLogGio()); }