ucs_log_func_rc_t ucs_log_default_handler(const char *file, unsigned line, const char *function, ucs_log_level_t level, const char *prefix, const char *message, va_list ap) { size_t buffer_size = ucs_config_memunits_get(ucs_global_opts.log_buffer_size, 256, 2048); const char *short_file; struct timeval tv; size_t length; char *buf; char *valg_buf; if (!ucs_log_enabled(level) && (level != UCS_LOG_LEVEL_PRINT)) { return UCS_LOG_FUNC_RC_CONTINUE; } buf = ucs_alloca(buffer_size + 1); buf[buffer_size] = 0; strncpy(buf, prefix, buffer_size); length = strlen(buf); vsnprintf(buf + length, buffer_size - length, message, ap); short_file = strrchr(file, '/'); short_file = (short_file == NULL) ? file : short_file + 1; gettimeofday(&tv, NULL); if (level <= ucs_global_opts.log_level_trigger) { ucs_handle_error(ucs_log_level_names[level], "%13s:%-4u %s: %s", short_file, line, ucs_log_level_names[level], buf); } else if (RUNNING_ON_VALGRIND) { valg_buf = ucs_alloca(buffer_size + 1); snprintf(valg_buf, buffer_size, "[%lu.%06lu] %16s:%-4u %-4s %-5s %s\n", tv.tv_sec, tv.tv_usec, short_file, line, "UCX", ucs_log_level_names[level], buf); VALGRIND_PRINTF("%s", valg_buf); } else if (ucs_log_initialized) { fprintf(ucs_log_file, "[%lu.%06lu] [%s:%-5d:%d] %16s:%-4u %-4s %-5s %s\n", tv.tv_sec, tv.tv_usec, ucs_log_hostname, ucs_log_pid, ucs_log_get_thread_num(), short_file, line, "UCX", ucs_log_level_names[level], buf); } else { fprintf(stdout, "[%lu.%06lu] %16s:%-4u %-4s %-5s %s\n", tv.tv_sec, tv.tv_usec, short_file, line, "UCX", ucs_log_level_names[level], buf); } /* flush the log file if the log_level of this message is fatal or error */ if (level <= UCS_LOG_LEVEL_ERROR) { ucs_log_flush(); } return UCS_LOG_FUNC_RC_CONTINUE; }
void __ucs_abort(const char *file, unsigned line, const char *function, const char *message, ...) { size_t buffer_size = ucs_global_opts.log_buffer_size; const char *short_file; char *buffer; va_list ap; buffer = ucs_alloca(buffer_size + 1); va_start(ap, message); vsnprintf(buffer, buffer_size, message, ap); va_end(ap); short_file = strrchr(file, '/'); short_file = (short_file == NULL) ? file : short_file + 1; ucs_log_fatal_error("%13s:%-4u %s", short_file, line, buffer); ucs_log_flush(); ucs_debug_cleanup(); ucs_handle_error(); abort(); }