12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // 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.
- #ifndef OPENCV_LOGGER_HPP
- #define OPENCV_LOGGER_HPP
- #include <iostream>
- #include <sstream>
- #include <limits.h> // INT_MAX
- #include "logger.defines.hpp"
- //! @addtogroup core_logging
- // This section describes OpenCV logging utilities.
- //
- //! @{
- namespace cv {
- namespace utils {
- namespace logging {
- //! Supported logging levels and their semantic
- enum LogLevel {
- LOG_LEVEL_SILENT = 0, //!< for using in setLogVevel() call
- LOG_LEVEL_FATAL = 1, //!< Fatal (critical) error (unrecoverable internal error)
- LOG_LEVEL_ERROR = 2, //!< Error message
- LOG_LEVEL_WARNING = 3, //!< Warning message
- LOG_LEVEL_INFO = 4, //!< Info message
- LOG_LEVEL_DEBUG = 5, //!< Debug message. Disabled in the "Release" build.
- LOG_LEVEL_VERBOSE = 6, //!< Verbose (trace) messages. Requires verbosity level. Disabled in the "Release" build.
- #ifndef CV_DOXYGEN
- ENUM_LOG_LEVEL_FORCE_INT = INT_MAX
- #endif
- };
- /** Set global logging level
- @return previous logging level
- */
- CV_EXPORTS LogLevel setLogLevel(LogLevel logLevel);
- /** Get global logging level */
- CV_EXPORTS LogLevel getLogLevel();
- namespace internal {
- /** Write log message */
- CV_EXPORTS void writeLogMessage(LogLevel logLevel, const char* message);
- } // namespace
- /**
- * \def CV_LOG_STRIP_LEVEL
- *
- * Define CV_LOG_STRIP_LEVEL=CV_LOG_LEVEL_[DEBUG|INFO|WARN|ERROR|FATAL|DISABLED] to compile out anything at that and before that logging level
- */
- #ifndef CV_LOG_STRIP_LEVEL
- # if defined NDEBUG
- # define CV_LOG_STRIP_LEVEL CV_LOG_LEVEL_DEBUG
- # else
- # define CV_LOG_STRIP_LEVEL CV_LOG_LEVEL_VERBOSE
- # endif
- #endif
- #define CV_LOG_FATAL(tag, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_FATAL) break; std::stringstream ss; ss << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_FATAL, ss.str().c_str()); break; }
- #define CV_LOG_ERROR(tag, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_ERROR) break; std::stringstream ss; ss << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_ERROR, ss.str().c_str()); break; }
- #define CV_LOG_WARNING(tag, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_WARNING) break; std::stringstream ss; ss << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_WARNING, ss.str().c_str()); break; }
- #if CV_LOG_STRIP_LEVEL <= CV_LOG_LEVEL_INFO
- #define CV_LOG_INFO(tag, ...)
- #else
- #define CV_LOG_INFO(tag, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_INFO) break; std::stringstream ss; ss << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_INFO, ss.str().c_str()); break; }
- #endif
- #if CV_LOG_STRIP_LEVEL <= CV_LOG_LEVEL_DEBUG
- #define CV_LOG_DEBUG(tag, ...)
- #else
- #define CV_LOG_DEBUG(tag, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_DEBUG) break; std::stringstream ss; ss << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_DEBUG, ss.str().c_str()); break; }
- #endif
- #if CV_LOG_STRIP_LEVEL <= CV_LOG_LEVEL_VERBOSE
- #define CV_LOG_VERBOSE(tag, v, ...)
- #else
- #define CV_LOG_VERBOSE(tag, v, ...) for(;;) { if (cv::utils::logging::getLogLevel() < cv::utils::logging::LOG_LEVEL_VERBOSE) break; std::stringstream ss; ss << "[VERB" << v << ":" << cv::utils::getThreadID() << "] " << __VA_ARGS__; cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LOG_LEVEL_VERBOSE, ss.str().c_str()); break; }
- #endif
- }}} // namespace
- //! @}
- #endif // OPENCV_LOGGER_HPP
|