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