Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
LogCategory.h
Go to the documentation of this file.
1#pragma once
2
12
13#include <atomic>
14#include <mutex>
15#include <string>
16#include <unordered_map>
17#include <vector>
18
19namespace EngineCore
20{
21
27enum class LogVerbosity : uint8_t
28{
29 Fatal = 0,
30 Error = 1,
31 Warning = 2,
32 Info = 3,
33 Debug = 4,
34 Verbose = 5,
35
36 // Aliases for compatibility
39};
40
44constexpr const char* verbosityToString(LogVerbosity v)
45{
46 switch (v) {
47 case LogVerbosity::Fatal: return "Fatal";
48 case LogVerbosity::Error: return "Error";
49 case LogVerbosity::Warning: return "Warning";
50 case LogVerbosity::Info: return "Info";
51 case LogVerbosity::Debug: return "Debug";
52 case LogVerbosity::Verbose: return "Verbose";
53 default: return "Unknown";
54 }
55}
56
61LogVerbosity verbosityFromString(const std::string& str);
62
67{
68 // plog::Severity: none=0, fatal=1, error=2, warning=3, info=4, debug=5, verbose=6
69 switch (v) {
70 case LogVerbosity::Fatal: return 1;
71 case LogVerbosity::Error: return 2;
72 case LogVerbosity::Warning: return 3;
73 case LogVerbosity::Info: return 4;
74 case LogVerbosity::Debug: return 5;
75 case LogVerbosity::Verbose: return 6;
76 default: return 4;
77 }
78}
79
89{
90public:
97 LogCategory(const char* name, LogVerbosity defaultVerbosity, LogVerbosity compileTimeVerbosity);
98
100 [[nodiscard]] const char* getName() const { return name_; }
101
103 [[nodiscard]] LogVerbosity getVerbosity() const { return runtimeVerbosity_.load(std::memory_order_relaxed); }
104
106 [[nodiscard]] constexpr LogVerbosity getCompileTimeVerbosity() const { return compileTimeVerbosity_; }
107
109 void setVerbosity(LogVerbosity verbosity) { runtimeVerbosity_.store(verbosity, std::memory_order_relaxed); }
110
116 [[nodiscard]] bool isSuppressed(LogVerbosity messageVerbosity) const
117 {
118 return static_cast<uint8_t>(messageVerbosity) > static_cast<uint8_t>(runtimeVerbosity_.load(std::memory_order_relaxed));
119 }
120
121private:
122 const char* name_;
123 std::atomic<LogVerbosity> runtimeVerbosity_;
125};
126
133{
134public:
136 static LogCategoryManager& get();
137
139 void registerCategory(LogCategory* category);
140
142 [[nodiscard]] LogCategory* findCategory(const std::string& name);
143
146 bool setVerbosity(const std::string& categoryName, LogVerbosity verbosity);
147
149 void setAllVerbosity(LogVerbosity verbosity);
150
152 [[nodiscard]] std::vector<LogCategory*> getAllCategories() const;
153
169 bool loadConfig(const std::string& configPath);
170
176 bool saveConfig(const std::string& configPath) const;
177
178private:
181
182 // Non-copyable
185
186 mutable std::mutex mutex_;
187 std::unordered_map<std::string, LogCategory*> categories_;
189};
190
191} // namespace EngineCore
192
193// ============================================================================
194// Category Declaration Macros
195// ============================================================================
196
207#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
208 extern ::EngineCore::LogCategory CategoryName;
209
219#define DEFINE_LOG_CATEGORY(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
220 ::EngineCore::LogCategory CategoryName(#CategoryName, \
221 ::EngineCore::LogVerbosity::DefaultVerbosity, \
222 ::EngineCore::LogVerbosity::CompileTimeVerbosity);
223
234#define DEFINE_LOG_CATEGORY_STATIC(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
235 static ::EngineCore::LogCategory CategoryName##_Instance(#CategoryName, \
236 ::EngineCore::LogVerbosity::DefaultVerbosity, \
237 ::EngineCore::LogVerbosity::CompileTimeVerbosity); \
238 static ::EngineCore::LogCategory& CategoryName = CategoryName##_Instance;
void setAllVerbosity(LogVerbosity verbosity)
Set verbosity for all categories.
LogCategoryManager & operator=(const LogCategoryManager &)=delete
LogCategoryManager(const LogCategoryManager &)=delete
std::unordered_map< std::string, LogCategory * > categories_
LogCategory * findCategory(const std::string &name)
Find a category by name.
std::vector< LogCategory * > getAllCategories() const
Get all registered categories (for debug UI, listing, etc.)
bool loadConfig(const std::string &configPath)
Load verbosity settings from a JSON config file.
bool setVerbosity(const std::string &categoryName, LogVerbosity verbosity)
bool saveConfig(const std::string &configPath) const
Save current verbosity settings to a JSON config file.
static LogCategoryManager & get()
Get the singleton instance.
void registerCategory(LogCategory *category)
Register a category (called automatically by DEFINE_LOG_CATEGORY)
Represents a single log category with verbosity control.
Definition LogCategory.h:89
constexpr LogVerbosity getCompileTimeVerbosity() const
Get compile-time verbosity (for constexpr checks)
std::atomic< LogVerbosity > runtimeVerbosity_
void setVerbosity(LogVerbosity verbosity)
Set runtime verbosity.
const char * getName() const
Get the category name.
LogCategory(const char *name, LogVerbosity defaultVerbosity, LogVerbosity compileTimeVerbosity)
Construct a log category.
LogVerbosity getVerbosity() const
Get current runtime verbosity.
bool isSuppressed(LogVerbosity messageVerbosity) const
Check if a message at the given verbosity should be logged.
const LogVerbosity compileTimeVerbosity_
Log category system implementation.
LogVerbosity verbosityFromString(const std::string &str)
Parse verbosity from string (case-insensitive)
LogVerbosity
Log verbosity levels, ordered from most to least severe.
Definition LogCategory.h:28
@ Warning
Potential issue.
Definition LogCategory.h:31
@ Info
Important state changes.
Definition LogCategory.h:32
@ Fatal
Unrecoverable error, may crash.
Definition LogCategory.h:29
@ Error
Recoverable error.
Definition LogCategory.h:30
@ Debug
Development debugging.
Definition LogCategory.h:33
@ Verbose
Detailed tracing.
Definition LogCategory.h:34
constexpr int verbosityToPlogSeverity(LogVerbosity v)
Convert LogVerbosity to plog::Severity.
Definition LogCategory.h:66
constexpr const char * verbosityToString(LogVerbosity v)
Convert verbosity enum to string for display/config.
Definition LogCategory.h:44