Program Listing for File logging.h
↰ Return to documentation for file (include/converter/include/mindapi/base/logging.h
)
#ifndef MINDSPORE_CORE_MINDAPI_BASE_LOGGING_H_
#define MINDSPORE_CORE_MINDAPI_BASE_LOGGING_H_
#include <cstdint>
#include <memory>
#include <sstream>
#include <utility>
#include "mindapi/base/macros.h"
namespace mindspore::api {
enum class LogLevel : uint8_t { kDebug = 0, kInfo, kWarning, kError, kException };
class LogWriterImpl;
class LogStream {
public:
template <typename T>
LogStream &operator<<(T &&value) noexcept {
stream_ << (std::forward<T>(value));
return *this;
}
private:
friend class LogWriterImpl;
std::stringstream stream_;
};
class MIND_API LogWriter {
public:
LogWriter(LogLevel level, const char *file, int line, const char *func);
~LogWriter();
void operator<(const LogStream &stream) const noexcept;
void operator^(const LogStream &stream) const NO_RETURN;
static bool IsEnabled(LogLevel level);
private:
std::unique_ptr<LogWriterImpl> impl_;
};
#define MIND_LOG_STREAM mindspore::api::LogStream()
#define MIND_LOG_WRITER mindspore::api::LogWriter
#define MIND_LOG_LEVEL(L) mindspore::api::LogLevel::L
#define MIND_LOG_THROW(L) MIND_LOG_WRITER(MIND_LOG_LEVEL(L), __FILE__, __LINE__, __FUNCTION__) ^ MIND_LOG_STREAM
#define MIND_LOG_WRITE(L) MIND_LOG_WRITER(MIND_LOG_LEVEL(L), __FILE__, __LINE__, __FUNCTION__) < MIND_LOG_STREAM
#define MIND_LOG_IF(L) \
if (MIND_LOG_WRITER::IsEnabled(MIND_LOG_LEVEL(L))) MIND_LOG_WRITE(L)
#define MIND_LOG_DEBUG MIND_LOG_IF(kDebug)
#define MIND_LOG_INFO MIND_LOG_IF(kInfo)
#define MIND_LOG_WARNING MIND_LOG_IF(kWarning)
#define MIND_LOG_ERROR MIND_LOG_IF(kError)
#define MIND_LOG_EXCEPTION MIND_LOG_THROW(kException)
#define MIND_LOG(level) MIND_LOG_##level
#if !defined(MIND_LOG_NO_MS_LOG) && !defined(MS_LOG)
#define MS_LOG(level) MIND_LOG_##level
#endif
} // namespace mindspore::api
#endif // MINDSPORE_CORE_MINDAPI_BASE_LOGGING_H_