Vita
log.h
Go to the documentation of this file.
1
13#if !defined(VITA_LOG_H)
14#define VITA_LOG_H
15
16#include <memory>
17#include <sstream>
18
19#include "kernel/common.h"
20
21namespace vita
22{
23
31class log
32{
33public:
47 enum level {lALL, lDEBUG, lINFO, lOUTPUT, lWARNING, lERROR, lFATAL, lOFF};
48
51
53 static std::unique_ptr<std::ostream> stream;
54 static void setup_stream(const std::string &base);
55
56 explicit log();
57 log(const log &) = delete;
58 log &operator=(const log &) = delete;
59
60 virtual ~log();
61
62 std::ostringstream &get(level = lOUTPUT);
63
64protected:
65 std::ostringstream os;
66
67private:
68 level level_; // current log level
69};
70
100#if defined(NDEBUG)
101#define vitaPRINT(level) if (level == log::lDEBUG);\
102 else if (level < log::reporting_level);\
103 else log().get(level)
104#else
105#define vitaPRINT(level) if (level < log::reporting_level);\
106 else log().get(level)
107#endif
108
109#define vitaFATAL vitaPRINT(log::lFATAL)
110#define vitaDEBUG vitaPRINT(log::lDEBUG)
111#define vitaERROR vitaPRINT(log::lERROR)
112#define vitaINFO vitaPRINT(log::lINFO)
113#define vitaOUTPUT vitaPRINT(log::lOUTPUT)
114#define vitaWARNING vitaPRINT(log::lWARNING)
115
116} // namespace vita
117#endif // include guard
A basic console printer with integrated logger.
Definition: log.h:32
static std::unique_ptr< std::ostream > stream
Optional log stream.
Definition: log.h:53
std::ostringstream & get(level=lOUTPUT)
Sets the logging level of a message.
Definition: log.cc:48
log()
Creates a log object.
Definition: log.cc:31
static void setup_stream(const std::string &base)
Sets the log::stream variable with a convenient value.
Definition: log.cc:89
level
The log level.
Definition: log.h:47
static level reporting_level
Messages with a lower level aren't logged / printed.
Definition: log.h:50
base_t base(const value_t &v)
A simple shortcut for casting an value_t to base_t.
Definition: real.h:49
The main namespace for the project.