(C++)  1.1.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
LoggerManager.hh
1 #ifndef GRAIL_LOGGER_MANAGER_H
2 #define GRAIL_LOGGER_MANAGER_H
3 
4 #include <map>
5 #include <string>
6 #include <ostream>
7 #include <memory>
8 #include <vector>
9 #include <sstream>
10 #include <mutex>
11 #include <atomic>
12 #include <condition_variable>
13 
14 #include "Sink.hh"
15 
16 
17 namespace logger_hidden_namespace
18 {
19  std::string grail_preprocess_file_path(const char* _file);
20 }
21 
22 #define GRAIL_LOG(name, severity, message) grail::LoggerManager::GetInstance().Log((name), (severity), (message), logger_hidden_namespace::grail_preprocess_file_path(__FILE__), __LINE__)
23 
24 namespace grail
25 {
26  enum class Severity
27  {
28  TRACE = 0,
29  DEBUG = 1,
30  INFO = 2,
31  WARNING = 3,
32  ERRORS = 4,
33  CRITICAL = 5,
34  };
35 
36  class LoggerManager final
37  {
38  public:
39  LoggerManager(const LoggerManager&) = delete;
40  LoggerManager(LoggerManager &&) = delete;
41  ~LoggerManager();
42  LoggerManager& operator=(const LoggerManager&) = delete;
43  LoggerManager& operator=(LoggerManager&&) = delete;
44  static LoggerManager& GetInstance();
45  void CreateLogger(const std::string& loggerName);
46  void AddSinkToLogger(const std::string& loggerName, std::shared_ptr<Sink> sink);
47  void Log(const std::string& loggerName, const Severity& severity, const std::string& message, const std::string& file, int line) const;
48 
49  void ClearLoggers();
50 
51  private:
52  LoggerManager();
53  std::string SeverityMessage(Severity severity) const;
54  std::map<std::string, std::vector<std::shared_ptr<Sink>>> loggers{};
55 
56  mutable std::mutex loggerMutex{};
57  };
58 }
59 #endif //GRAIL_LOGGER_MANAGER_H
Definition: LoggerManager.hh:37