forked from benoitryder/megumi
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlog.h
74 lines (55 loc) · 1.58 KB
/
log.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef LOG_H
#define LOG_H
#include <sstream>
#include <boost/format.hpp>
namespace Log {
/// Log severities
enum Severity {
INFO = 0,
NOTICE,
WARNING,
ERROR,
};
/// Set minimum report level (not thread-safe)
void setMinimumSeverity(Severity severity);
/// Message logger
class Message
{
public:
Message(Severity severity);
~Message();
std::ostringstream& stream() { return stream_; }
/// Write message to destination
void flush();
private:
Severity severity_;
std::ostringstream stream_;
};
// For DLOG implementation in NDEBUG mode
struct VoidMessage
{
VoidMessage() {}
template <typename T> void operator&(const T&) const {}
};
}
// Main log macro
#define LOG(severity) \
::Log::Message(::Log::Severity::severity).stream()
// Use boost::format formatting
#define LOGF(severity, f) LOG(severity) << boost::format(f)
// Log message if condition is not fullfilled
#define CHECK(severity, cond) (cond) ? (void)0 : ::Log::VoidMessage() & LOG(severity)
#define CHECKF(severity, cond, f) (cond) ? (void)0 : ::Log::VoidMessage() & LOGF(severity, f)
// Debug message
#ifndef NDEBUG
#define DLOG(severity) LOG(severity)
#define DLOGF(severity, f) LOGF(severity, f)
#define DCHECK(severity, cond) CHECK(severity, cond)
#define DCHECKF(severity, cond, f) CHECKF(severity, conf, f)
#else
#define DLOG(severity) true ? (void)0 : ::Log::VoidMessage() & LOG(severity)
#define DLOGF(severity, f) true ? (void)0 : ::Log::VoidMessage() & LOGF(severity, f)
#define DCHECK(severity, cond) DLOG(severity)
#define DCHECKF(severity, cond, f) DLOGF(severity, f)
#endif
#endif