2017-12-18 06:28:33 +08:00
|
|
|
// This file is part of OpenCV project.
|
|
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
|
|
// of this distribution and at http://opencv.org/license.html.
|
|
|
|
|
2018-03-16 21:36:11 +08:00
|
|
|
#include "precomp.hpp"
|
2017-12-18 06:28:33 +08:00
|
|
|
|
|
|
|
#include <opencv2/core/utils/configuration.private.hpp>
|
|
|
|
#include <opencv2/core/utils/logger.hpp>
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
#include <iostream>
|
|
|
|
#include <fstream>
|
|
|
|
|
2018-03-14 20:33:02 +08:00
|
|
|
#ifdef __ANDROID__
|
|
|
|
# include <android/log.h>
|
|
|
|
#endif
|
|
|
|
|
2017-12-18 06:28:33 +08:00
|
|
|
namespace cv {
|
|
|
|
namespace utils {
|
|
|
|
namespace logging {
|
|
|
|
|
|
|
|
static LogLevel parseLogLevelConfiguration()
|
|
|
|
{
|
2018-06-05 17:40:43 +08:00
|
|
|
static cv::String param_log_level = utils::getConfigurationParameterString("OPENCV_LOG_LEVEL",
|
|
|
|
#if defined NDEBUG
|
|
|
|
"WARNING"
|
|
|
|
#else
|
|
|
|
"INFO"
|
|
|
|
#endif
|
|
|
|
);
|
2017-12-18 06:28:33 +08:00
|
|
|
if (param_log_level == "DISABLED" || param_log_level == "disabled" ||
|
|
|
|
param_log_level == "0" || param_log_level == "OFF" || param_log_level == "off")
|
|
|
|
return LOG_LEVEL_SILENT;
|
|
|
|
if (param_log_level == "FATAL" || param_log_level == "fatal")
|
|
|
|
return LOG_LEVEL_FATAL;
|
|
|
|
if (param_log_level == "ERROR" || param_log_level == "error")
|
|
|
|
return LOG_LEVEL_ERROR;
|
|
|
|
if (param_log_level == "WARNING" || param_log_level == "warning" ||
|
|
|
|
param_log_level == "WARNINGS" || param_log_level == "warnings" ||
|
|
|
|
param_log_level == "WARN" || param_log_level == "warn")
|
|
|
|
return LOG_LEVEL_WARNING;
|
|
|
|
if (param_log_level == "INFO" || param_log_level == "info")
|
|
|
|
return LOG_LEVEL_INFO;
|
|
|
|
if (param_log_level == "DEBUG" || param_log_level == "debug")
|
|
|
|
return LOG_LEVEL_DEBUG;
|
|
|
|
if (param_log_level == "VERBOSE" || param_log_level == "verbose")
|
|
|
|
return LOG_LEVEL_VERBOSE;
|
|
|
|
std::cerr << "ERROR: Unexpected logging level value: " << param_log_level << std::endl;
|
|
|
|
return LOG_LEVEL_INFO;
|
|
|
|
}
|
|
|
|
|
|
|
|
static LogLevel& getLogLevelVariable()
|
|
|
|
{
|
|
|
|
static LogLevel g_logLevel = parseLogLevelConfiguration();
|
|
|
|
return g_logLevel;
|
|
|
|
}
|
|
|
|
|
|
|
|
LogLevel setLogLevel(LogLevel logLevel)
|
|
|
|
{
|
|
|
|
LogLevel old = getLogLevelVariable();
|
|
|
|
getLogLevelVariable() = logLevel;
|
|
|
|
return old;
|
|
|
|
}
|
|
|
|
|
|
|
|
LogLevel getLogLevel()
|
|
|
|
{
|
|
|
|
return getLogLevelVariable();
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace internal {
|
|
|
|
|
|
|
|
void writeLogMessage(LogLevel logLevel, const char* message)
|
|
|
|
{
|
|
|
|
const int threadID = cv::utils::getThreadID();
|
2018-03-14 20:33:02 +08:00
|
|
|
std::ostringstream ss;
|
2017-12-18 06:28:33 +08:00
|
|
|
switch (logLevel)
|
|
|
|
{
|
|
|
|
case LOG_LEVEL_FATAL: ss << "[FATAL:" << threadID << "] " << message << std::endl; break;
|
|
|
|
case LOG_LEVEL_ERROR: ss << "[ERROR:" << threadID << "] " << message << std::endl; break;
|
|
|
|
case LOG_LEVEL_WARNING: ss << "[ WARN:" << threadID << "] " << message << std::endl; break;
|
|
|
|
case LOG_LEVEL_INFO: ss << "[ INFO:" << threadID << "] " << message << std::endl; break;
|
|
|
|
case LOG_LEVEL_DEBUG: ss << "[DEBUG:" << threadID << "] " << message << std::endl; break;
|
|
|
|
case LOG_LEVEL_VERBOSE: ss << message << std::endl; break;
|
|
|
|
default:
|
|
|
|
return;
|
|
|
|
}
|
2018-03-14 20:33:02 +08:00
|
|
|
#ifdef __ANDROID__
|
|
|
|
int android_logLevel = ANDROID_LOG_INFO;
|
|
|
|
switch (logLevel)
|
|
|
|
{
|
|
|
|
case LOG_LEVEL_FATAL: android_logLevel = ANDROID_LOG_FATAL; break;
|
|
|
|
case LOG_LEVEL_ERROR: android_logLevel = ANDROID_LOG_ERROR; break;
|
|
|
|
case LOG_LEVEL_WARNING: android_logLevel = ANDROID_LOG_WARN; break;
|
|
|
|
case LOG_LEVEL_INFO: android_logLevel = ANDROID_LOG_INFO; break;
|
|
|
|
case LOG_LEVEL_DEBUG: android_logLevel = ANDROID_LOG_DEBUG; break;
|
|
|
|
case LOG_LEVEL_VERBOSE: android_logLevel = ANDROID_LOG_VERBOSE; break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
__android_log_print(android_logLevel, "OpenCV/" CV_VERSION, "%s", ss.str().c_str());
|
|
|
|
#endif
|
|
|
|
std::ostream* out = (logLevel <= LOG_LEVEL_WARNING) ? &std::cerr : &std::cout;
|
2017-12-18 06:28:33 +08:00
|
|
|
(*out) << ss.str();
|
|
|
|
if (logLevel <= LOG_LEVEL_WARNING)
|
|
|
|
(*out) << std::flush;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
}}} // namespace
|