My Project
Loading...
Searching...
No Matches
logging.hpp
1#ifndef LOGGING_H
2#define LOGGING_H
3
4#ifdef ENABLE_LOGGING
5
6#include <string>
7
9
10// Levels as Numbers (in order of increasing severity)
11#define INFO 0
12#define WARN 1
13#define ERROR 2
14
15// Levels as Strings (in order of increasing severity)
16#define INFO_STR "INFO"
17#define WARN_STR "WARN"
18#define ERROR_STR "ERROR"
19
25#define GET_LEVEL(level) \
26 (level == ERROR ? ERROR_STR : (level == WARN ? WARN_STR : INFO_STR))
27
29
30// LOG_INFO, LOG_WARN and LOG_ERROR
31// should be used within the program
32// (see command-line/parser.cpp for examples)
33
34// Basically, the logging level only allows logs equal
35// to its level and above (in severity) to be printed
36#if LOGGING_LEVEL == INFO
37 #define LOG_INFO(msg) found::Log(INFO, msg)
38 #define LOG_WARN(msg) found::Log(WARN, msg)
39 #define LOG_ERROR(msg) found::Log(ERROR, msg)
40#elif LOGGING_LEVEL == WARN
41 #define LOG_INFO(msg)
42 #define LOG_WARN(msg) found::Log(WARN, msg)
43 #define LOG_ERROR(msg) found::Log(ERROR, msg)
44#else
45 #define LOG_INFO(msg)
46 #define LOG_WARN(msg)
47 #define LOG_ERROR(msg) found::Log(ERROR, msg)
48#endif
49
50namespace found {
51
53
54// The output streams to where the logs go. You must
55// place your definitions of each within each ifndef
56// statement
57#ifndef INFO_STREAM
58#define INFO_STREAM std::cout
59#endif
60#ifndef WARN_STREAM
61#define WARN_STREAM std::cerr
62#endif
63#ifndef ERROR_STREAM
64#define ERROR_STREAM std::cerr
65#endif
66
72#define GET_STREAM(level) \
73 (level == ERROR ? ERROR_STREAM : (level == WARN ? WARN_STREAM : INFO_STREAM))
74
81void Log(int level, const std::string message);
82
83} // namespace found
84
85#else
86
87#define LOG_INFO(msg)
88#define LOG_WARN(msg)
89#define LOG_ERROR(msg)
90
91#endif
92
93#endif // LOGGING_H
Definition converters.hpp:10