1 #ifndef IRIS_SEVERITY_LOGGER_H_
2 #define IRIS_SEVERITY_LOGGER_H_
4 #include "snprintf_formatter.h"
5 #include "base_logger.h"
18 extern severity_level thread_severity_level;
20 // a level logger provides per-thread severity level filtering .
21 class level_logger: public base_logger {
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,
31 default_thread_ringbuf_size,
32 default_thread_queue_size),
33 m_default_level(default_level) {}
35 // set the severity level for the current thread
36 void set_severity_level(severity_level level) {
37 thread_severity_level = level;
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)...);
49 template<typename... Args>
50 void trace(const char * fmt, Args&&... args) {
51 log(TRACE, fmt, std::forward<Args>(args)...);
54 template<typename... Args>
55 void debug(const char * fmt, Args&&... args) {
56 log(DEBUG, fmt, std::forward<Args>(args)...);
59 template<typename... Args>
60 void info(const char * fmt, Args&&... args) {
61 log(INFO, fmt, std::forward<Args>(args)...);
64 template<typename... Args>
65 void warn(const char * fmt, Args&&... args) {
66 log(WARN, fmt, std::forward<Args>(args)...);
69 template<typename... Args>
70 void error(const char * fmt, Args&&... args) {
71 log(ERROR, fmt, std::forward<Args>(args)...);
74 template<typename... Args>
75 void fatal(const char * fmt, Args&&... args) {
76 log(FATAL, fmt, std::forward<Args>(args)...);
79 severity_level m_default_level;