Orion
high-rate readout
logger.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include <string>
8 #include <map>
9 
10 #include "spdlog/fmt/fmt.h"
11 
12 namespace itk {
13 
14 namespace logger {
15 
17  enum log_level_t {
18  LOG_LEVEL_TRACE = 0,
19  LOG_LEVEL_DEBUG = 1,
20  LOG_LEVEL_INFO = 2,
21  LOG_LEVEL_WARN = 3,
22  LOG_LEVEL_ERROR = 4,
23  LOG_LEVEL_FATAL = 5,
24  LOG_LEVEL_OFF = 6
25  };
26 
28  static const std::map<int, std::string> log_level_map = {
29  { LOG_LEVEL_OFF, "off" },
30  { LOG_LEVEL_FATAL, "fatal" },
31  { LOG_LEVEL_ERROR, "error" },
32  { LOG_LEVEL_WARN, "warning" },
33  { LOG_LEVEL_INFO, "info" },
34  { LOG_LEVEL_DEBUG, "debug" },
35  { LOG_LEVEL_TRACE, "trace" }
36  };
37 
40  inline std::string log_level_string(log_level_t level) {
41  auto it = log_level_map.find(level);
42  if (it == log_level_map.end()) return "unknown";
43  return it->second;
44  }
45 
48  extern void set_log_level(std::string name, log_level_t level);
49 
51  extern void dump_loggers();
52 
53 namespace intf {
54 
59  class CoreLogger {
60  public:
61 
63  virtual ~CoreLogger() = default;
64 
68  virtual void log_msg(log_level_t level, const std::string &msg) = 0;
69 
73  virtual bool should_log(log_level_t level) const = 0;
74 
76 
79  virtual log_level_t get_level() const = 0;
80 
83  virtual void set_level(log_level_t level) = 0;
84 
87  virtual void set_pattern(const std::string& pattern) = 0;
88 
89  }; // CoreLogger
90 
91 } // intf
92 
93 
94 namespace make {
95 
96  extern std::shared_ptr<intf::CoreLogger> CoreLogger(const std::string& logname);
97 
98 } // make
99 
100 
107  template<int LOG_LEVEL>
108  class Logger {
109  public:
110 
113  Logger(const std::string& logname) {
114  core = itk::logger::make::CoreLogger(logname);
115  }
116 
118 
122  template<typename... Args>
123  inline void log(log_level_t level, fmt::format_string<Args...> fmt, Args &&...args) {
124  if (level >= LOG_LEVEL && core->should_log(level))
125  core->log_msg(level, fmt::format(fmt, std::forward<Args>(args)...));
126  }
127 
131  template<typename... Args>
132  inline void trace(fmt::format_string<Args...> fmt, Args &&...args) {
133  log(LOG_LEVEL_TRACE, fmt, std::forward<Args>(args)...);
134  }
135 
139  template<typename... Args>
140  inline void debug(fmt::format_string<Args...> fmt, Args &&...args) {
141  log(LOG_LEVEL_DEBUG, fmt, std::forward<Args>(args)...);
142  }
143 
147  template<typename... Args>
148  inline void info(fmt::format_string<Args...> fmt, Args &&...args) {
149  log(LOG_LEVEL_INFO, fmt, std::forward<Args>(args)...);
150  }
151 
155  template<typename... Args>
156  inline void warn(fmt::format_string<Args...> fmt, Args &&...args) {
157  log(LOG_LEVEL_WARN, fmt, std::forward<Args>(args)...);
158  }
159 
163  template<typename... Args>
164  inline void error(fmt::format_string<Args...> fmt, Args &&...args) {
165  log(LOG_LEVEL_ERROR, fmt, std::forward<Args>(args)...);
166  }
167 
171  template<typename... Args>
172  inline void fatal(fmt::format_string<Args...> fmt, Args &&...args) {
173  log(LOG_LEVEL_FATAL, fmt, std::forward<Args>(args)...);
174  }
175 
179  inline bool should_log(log_level_t level) const { return core->should_log(level); }
180 
182 
185  inline log_level_t get_level() { return core->get_level(); }
186 
189  inline void set_level(log_level_t level) { core->set_level(level); }
190 
193  inline void set_pattern(const std::string& pattern) { core->set_pattern(pattern); }
194 
195 
196  private:
198  std::shared_ptr<intf::CoreLogger> core;
199 
200  }; // Logger
201 
202 } // logger
203 
206 
208  extern itk::Logger syslog;
209 
210 } // itk
Definition: logger.hpp:11
Logger class definition, wrapper around CoreLogger, adds templated methods for different logging leve...
Definition: logger.hpp:108
bool should_log(log_level_t level) const
Check if message with specified log level sould be logged.
Definition: logger.hpp:179
Logger(const std::string &logname)
Constructor.
Definition: logger.hpp:113
void error(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with error level.
Definition: logger.hpp:164
void debug(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with debug level.
Definition: logger.hpp:140
log_level_t get_level()
Properties.
Definition: logger.hpp:185
void set_pattern(const std::string &pattern)
Set logger message pattern.
Definition: logger.hpp:193
void fatal(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with fatal error level.
Definition: logger.hpp:172
void log(log_level_t level, fmt::format_string< Args... > fmt, Args &&...args)
Logging templates.
Definition: logger.hpp:123
void info(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with information level.
Definition: logger.hpp:148
void trace(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with trace level.
Definition: logger.hpp:132
void warn(fmt::format_string< Args... > fmt, Args &&...args)
Logs a message with warning level.
Definition: logger.hpp:156
void set_level(log_level_t level)
Set logger level.
Definition: logger.hpp:189
CoreLogger interface, includes only basic logging functionality.
Definition: logger.hpp:59
virtual void log_msg(log_level_t level, const std::string &msg)=0
Log a message.
virtual void set_level(log_level_t level)=0
Set logging level.
virtual bool should_log(log_level_t level) const =0
Check if message with specified log level will be logged.
virtual void set_pattern(const std::string &pattern)=0
Set logger message pattern.
virtual log_level_t get_level() const =0
Properties.
virtual ~CoreLogger()=default
Default destructor.
T * make(Args &... args)
Templated class creator.
Definition: factory.hpp:51
itk::Logger syslog
Default system logger.
void dump_loggers()
Dumps list of available loggers.
log_level_t
Logger level enumeration.
Definition: logger.hpp:17
std::string log_level_string(log_level_t level)
Logger level to text conversion.
Definition: logger.hpp:40
void set_log_level(std::string name, log_level_t level)
Set Logger level.