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