Sirius  0.0.0
log.h
Go to the documentation of this file.
1 
22 #ifndef SIRIUS_UTILS_LOG_H_
23 #define SIRIUS_UTILS_LOG_H_
24 
25 #include <string>
26 
27 #ifdef SIRIUS_ENABLE_LOGS
28 
29 #include <map>
30 #include <memory>
31 #include <mutex>
32 
33 #include <spdlog/spdlog.h>
34 
35 namespace sirius {
36 namespace utils {
37 
38 class LoggerManager {
39  public:
40  using Logger = spdlog::logger;
41  using LoggerSPtr = std::shared_ptr<Logger>;
42 
43  public:
44  static LoggerManager& Instance();
45 
46  void SetLogLevel(spdlog::level::level_enum level);
47  Logger* Get(const std::string& channel);
48 
49  private:
50  LoggerManager() = default;
51 
52  private:
53  std::mutex loggers_mutex_;
54  std::map<std::string, LoggerSPtr> loggers_;
55  spdlog::level::level_enum log_level_{spdlog::level::info};
56 };
57 
58 } // namespace utils
59 } // namespace sirius
60 
61 #define LOG_SET_LEVEL_ENUM(lvl_enum) \
62  sirius::utils::LoggerManager::Instance().SetLogLevel(lvl_enum)
63 #define LOG_SET_LEVEL(lvl) LOG_SET_LEVEL_ENUM(spdlog::level::lvl)
64 #define LOG(channel, level, ...) \
65  sirius::utils::LoggerManager::Instance().Get(channel)->level(__VA_ARGS__)
66 
67 #else
68 
69 #define LOG_SET_LEVEL_ENUM(lvl_enum)
70 #define LOG_SET_LEVEL(lvl)
71 #define LOG(channel, level, ...)
72 
73 #endif // SIRIUS_ENABLE_LOGS
74 
75 namespace sirius {
76 namespace utils {
77 
82 void SetVerbosityLevel(const std::string& level);
83 
84 } // namespace utils
85 } // namespace sirius
86 
87 #endif // SIRIUS_UTILS_LOG_H_
Definition: exception.h:27
void SetVerbosityLevel(const std::string &level)
Set verbosity level from string.