OpenFPGA/libs/libvtrutil/src/vtr_log.cpp

51 lines
1.5 KiB
C++

#include <string>
#include <fstream>
#include <cstdarg>
#include "vtr_util.h"
#include "vtr_log.h"
#include "log.h"
namespace vtr {
PrintHandlerInfo printf = log_print_info;
PrintHandlerInfo printf_info = log_print_info;
PrintHandlerWarning printf_warning = log_print_warning;
PrintHandlerError printf_error = log_print_error;
PrintHandlerDirect printf_direct = log_print_direct;
void set_log_file(const char* filename) {
log_set_output_file(filename);
}
} // namespace vtr
void add_warnings_to_suppress(std::string function_name) {
warnings_to_suppress.insert(function_name);
}
void set_noisy_warn_log_file(std::string log_file_name) {
std::ofstream log;
log.open(log_file_name, std::ifstream::out | std::ifstream::trunc);
log.close();
noisy_warn_log_file = log_file_name;
}
void print_or_suppress_warning(const char* pszFileName, unsigned int lineNum, const char* pszFuncName, const char* pszMessage, ...) {
std::string function_name(pszFuncName);
va_list va_args;
va_start(va_args, pszMessage);
std::string msg = vtr::vstring_fmt(pszMessage, va_args);
va_end(va_args);
auto result = warnings_to_suppress.find(function_name);
if (result == warnings_to_suppress.end()) {
vtr::printf_warning(pszFileName, lineNum, msg.data());
} else if (!noisy_warn_log_file.empty()) {
std::ofstream log;
log.open(noisy_warn_log_file.data(), std::ios_base::app);
log << "Warning:\n\tfile: " << pszFileName << "\n\tline: " << lineNum << "\n\tmessage: " << msg << std::endl;
log.close();
}
}