update readme
[c11concurrency-benchmarks.git] / iris / include / level_logger.h
1 #ifndef IRIS_SEVERITY_LOGGER_H_
2 #define IRIS_SEVERITY_LOGGER_H_
3
4 #include "snprintf_formatter.h"
5 #include "base_logger.h"
6
7 namespace iris {
8
9 enum severity_level {
10     UNSET,
11     TRACE,
12     DEBUG,
13     INFO,
14     WARN,
15     ERROR,
16     FATAL
17 };
18 extern severity_level thread_severity_level;
19
20 // a level logger provides per-thread severity level filtering .
21 class level_logger: public base_logger {
22 public:
23     level_logger(writer * pwriter = nullptr,
24                 severity_level default_level = INFO,
25                 size_t scan_interval = 100,
26                 size_t output_buffer_size = 102400,
27                 size_t default_thread_ringbuf_size = 102400,
28                 size_t default_thread_queue_size = 5000):
29         base_logger(pwriter, scan_interval, 
30                     output_buffer_size, 
31                     default_thread_ringbuf_size,
32                     default_thread_queue_size),
33         m_default_level(default_level) {}
34
35     // set the severity level for the current thread
36     void set_severity_level(severity_level level) {
37         thread_severity_level = level;
38     }
39
40     template<typename... Args>
41     void log(severity_level level, const char * fmt, Args&&... args) {
42         if (iris_unlikely(thread_severity_level == UNSET))
43             thread_severity_level = m_default_level;
44         if (thread_severity_level <= level) {
45             base_logger::log<snprintf_formatter>(fmt, std::forward<Args>(args)...);    
46         }
47     }
48
49     template<typename... Args>
50     void trace(const char * fmt, Args&&... args) {
51         log(TRACE, fmt, std::forward<Args>(args)...);
52     }
53
54     template<typename... Args>
55     void debug(const char * fmt, Args&&... args) {
56         log(DEBUG, fmt, std::forward<Args>(args)...);
57     }
58
59     template<typename... Args>
60     void info(const char * fmt, Args&&... args) {
61         log(INFO, fmt, std::forward<Args>(args)...);
62     }
63
64     template<typename... Args>
65     void warn(const char * fmt, Args&&... args) {
66         log(WARN, fmt, std::forward<Args>(args)...);
67     }
68
69     template<typename... Args>
70     void error(const char * fmt, Args&&... args) {
71         log(ERROR, fmt, std::forward<Args>(args)...);
72     }
73
74     template<typename... Args>
75     void fatal(const char * fmt, Args&&... args) {
76         log(FATAL, fmt, std::forward<Args>(args)...);
77     }
78 private:
79     severity_level m_default_level;
80 };
81
82 }
83 #endif