Skip to main content
Version: 🚧 Nightly

File log.h

Location: log.h

Classes

Namespaces

Includes

  • export.h

Included by

Source

#ifndef f3d_log_h
#define f3d_log_h

#include "export.h"

#include <sstream>
#include <string>

namespace f3d
{
class F3D_EXPORT log
{
public:
enum class VerboseLevel : unsigned char
{
DEBUG = 0,
INFO,
WARN,
ERROR,
QUIET
};

template<typename... Args>
static void print(VerboseLevel level, Args... args)
{
std::stringstream ss;
log::appendArg(ss, args...);
log::printInternal(level, ss.str());
}

template<typename... Args>
static void debug(Args... args)
{
std::stringstream ss;
log::appendArg(ss, args...);
log::debugInternal(ss.str());
}

template<typename... Args>
static void info(Args... args)
{
std::stringstream ss;
log::appendArg(ss, args...);
log::infoInternal(ss.str());
}

template<typename... Args>
static void warn(Args... args)
{
std::stringstream ss;
log::appendArg(ss, args...);
log::warnInternal(ss.str());
}

template<typename... Args>
static void error(Args... args)
{
std::stringstream ss;
log::appendArg(ss, args...);
log::errorInternal(ss.str());
}

static void setUseColoring(bool use);

static void setVerboseLevel(VerboseLevel level, bool forceStdErr = false);

static VerboseLevel getVerboseLevel();

protected:
static void appendArg(std::stringstream&)
{
}

template<typename T, typename... Args>
static void appendArg(std::stringstream& ss, T value, Args... args)
{
ss << value;
log::appendArg(ss, args...);
}

static void printInternal(VerboseLevel level, const std::string& msg);
static void errorInternal(const std::string& msg);
static void warnInternal(const std::string& msg);
static void infoInternal(const std::string& msg);
static void debugInternal(const std::string& msg);
};
}

#endif