Program Listing for File Log.h

Return to documentation for file (Source\Log\Inc\Log\Log.h)

#pragma once
#include "Types.h"
#include <vector>

namespace Azura {
enum class LogLevel {
  Debug,
  Info,
  Warning,
  Error,
  Fatal
};

class Log {
public:
  Log(String key);

  void Debug(U32 level, const char* fmt, ...) const;

  void Info(U32 level, const char* fmt, ...) const;

  void Warning(U32 level, const char* fmt, ...) const;

  void Error(U32 level, const char* fmt, ...) const;

  void Fatal(U32 level, const char* fmt, ...) const;

private:
  void ParseLevelString(const String& levelStr);

  U8 m_debugLevel;
  U8 m_infoLevel;
  U8 m_warningLevel;
  U8 m_errorLevel;
  U8 m_fatalLevel;
  String m_key;
  bool m_isReady;

  std::vector<char> m_temporaryBuffer;
};

#if defined BUILD_DEBUG || defined FORCE_LOGGING

// TODO(vasumahesh1):[LOG]: Fix BOOST_LOG_NAMED_SCOPE("") here.
#define LOG_DEBUG(LOG, LEVEL, STR, ...) \
  LOG.Debug(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_INFO(LOG, LEVEL, STR, ...) \
  LOG.Info(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_WARNING(LOG, LEVEL, STR, ...) \
  LOG.Warning(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_ERROR(LOG, LEVEL, STR, ...) \
  LOG.Error(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_FATAL(LOG, LEVEL, STR, ...) \
  LOG.Fatal(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_DBG(LOG, LEVEL, STR, ...) LOG_DEBUG(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_INF(LOG, LEVEL, STR, ...) LOG_INFO(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_WRN(LOG, LEVEL, STR, ...) LOG_WARNING(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_ERR(LOG, LEVEL, STR, ...) LOG_ERROR(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_FTL(LOG, LEVEL, STR, ...) LOG_FATAL(LOG, LEVEL, STR, __VA_ARGS__)

#elif BUILD_RELEASE

#define LOG_DEBUG(LOG, LEVEL, STR, ...)

#define LOG_INFO(LOG, LEVEL, STR, ...)

#define LOG_WARNING(LOG, LEVEL, STR, ...)

#define LOG_ERROR(LOG, LEVEL, STR, ...) \
  LOG.Error(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_FATAL(LOG, LEVEL, STR, ...) \
  LOG.Fatal(LEVEL, STR, __VA_ARGS__) // NOLINT

#define LOG_DBG(LOG, LEVEL, STR, ...) LOG_DEBUG(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_INF(LOG, LEVEL, STR, ...) LOG_INFO(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_WRN(LOG, LEVEL, STR, ...) LOG_WARNING(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_ERR(LOG, LEVEL, STR, ...) LOG_ERROR(LOG, LEVEL, STR, __VA_ARGS__)
#define LOG_FTL(LOG, LEVEL, STR, ...) LOG_FATAL(LOG, LEVEL, STR, __VA_ARGS__)

#endif

} // namespace Azura