Ember
Loading...
Searching...
No Matches
Logger.h
Go to the documentation of this file.
1#pragma once
2
3#include "Types/Types.h"
4#include <chrono>
5#include <functional>
6#include <map>
7#include <memory>
8#include <vector>
9// Removed ITab.h dependency - this is now in EmberForge application layer
10
11namespace EmberCore {
12
16enum class LogLevel {
17 All = 0, // Show all messages (equivalent to Trace)
18 Trace = 1, // Detailed trace information
19 Info = 2, // General information messages
20 Warning = 3, // Warning messages
21 Error = 4, // Error messages
22 Critical = 5 // Critical system errors
23};
24
40
44class Logger {
45 public:
46 Logger();
47 ~Logger() = default;
48
49 // Logging methods
50 void Trace(const EmberCore::String &category, const EmberCore::String &message);
51 void Info(const EmberCore::String &category, const EmberCore::String &message);
52 void Warning(const EmberCore::String &category, const EmberCore::String &message);
53 void Error(const EmberCore::String &category, const EmberCore::String &message);
54 void Critical(const EmberCore::String &category, const EmberCore::String &message);
55
56 // Generic log method
57 void Log(LogLevel level, const EmberCore::String &category, const EmberCore::String &message);
58
59 // Configuration
60 void SetMinLogLevel(LogLevel level) { min_log_level_ = level; }
62
63 void SetMaxEntries(size_t max_entries) { max_entries_ = max_entries; }
64 size_t GetMaxEntries() const { return max_entries_; }
65
66 // Unified logging configuration (controls spdlog integration)
67 void SetConsoleLoggingEnabled(bool enabled) { console_logging_enabled_ = enabled; }
69
70 void SetFileLoggingEnabled(bool enabled) { file_logging_enabled_ = enabled; }
72
73 // Console color control
74 void SetConsoleColorsEnabled(bool enabled);
75
76 // Entry management
77 const std::vector<std::shared_ptr<LogEntry>> &GetEntries() const { return entries_; }
78 void ClearEntries();
79
80 // Filtering
81 std::vector<std::shared_ptr<LogEntry>> GetFilteredEntries(LogLevel level_filter = LogLevel::All,
82 const EmberCore::String &category_filter = "",
83 const EmberCore::String &search_text = "") const;
84
85 // Observer pattern for UI updates
86 // Returns an observer ID that can be used to remove the observer later
87 using ObserverId = size_t;
88 ObserverId AddObserver(std::function<void()> observer);
90
91 // Singleton access (optional)
92 static Logger &GetInstance();
93
94 private:
95 void NotifyObservers();
96 void TrimEntries();
97
98 std::vector<std::shared_ptr<LogEntry>> entries_;
100 size_t max_entries_ = 1000;
101 std::map<ObserverId, std::function<void()>> observers_;
103
104 // Unified logging configuration
105 bool console_logging_enabled_ = true; // Enable console output via spdlog
106 bool file_logging_enabled_ = true; // Enable file output via spdlog
107};
108
109// LogPanel class moved to EmberForge application layer
110// (was wxWidgets-dependent and used ITab interface)
111
112// Unified logging macros - logs to console/file via spdlog
113#define LOG_TRACE(category, message) EmberCore::Logger::GetInstance().Trace(category, message)
114#define LOG_INFO(category, message) EmberCore::Logger::GetInstance().Info(category, message)
115#define LOG_WARNING(category, message) EmberCore::Logger::GetInstance().Warning(category, message)
116#define LOG_ERROR(category, message) EmberCore::Logger::GetInstance().Error(category, message)
117#define LOG_CRITICAL(category, message) EmberCore::Logger::GetInstance().Critical(category, message)
118
119} // namespace EmberCore
void NotifyObservers()
Definition Logger.cpp:224
std::map< ObserverId, std::function< void()> > observers_
Definition Logger.h:101
size_t GetMaxEntries() const
Definition Logger.h:64
bool IsFileLoggingEnabled() const
Definition Logger.h:71
size_t max_entries_
Definition Logger.h:100
size_t ObserverId
Definition Logger.h:87
bool IsConsoleLoggingEnabled() const
Definition Logger.h:68
void SetMaxEntries(size_t max_entries)
Definition Logger.h:63
static Logger & GetInstance()
Definition Logger.cpp:251
const std::vector< std::shared_ptr< LogEntry > > & GetEntries() const
Definition Logger.h:77
ObserverId AddObserver(std::function< void()> observer)
Definition Logger.cpp:216
void RemoveObserver(ObserverId id)
Definition Logger.cpp:222
std::vector< std::shared_ptr< LogEntry > > entries_
Definition Logger.h:98
void SetMinLogLevel(LogLevel level)
Definition Logger.h:60
void Log(LogLevel level, const EmberCore::String &category, const EmberCore::String &message)
Definition Logger.cpp:121
void SetConsoleColorsEnabled(bool enabled)
Definition Logger.cpp:240
bool file_logging_enabled_
Definition Logger.h:106
void ClearEntries()
Definition Logger.cpp:214
LogLevel GetMinLogLevel() const
Definition Logger.h:61
std::vector< std::shared_ptr< LogEntry > > GetFilteredEntries(LogLevel level_filter=LogLevel::All, const EmberCore::String &category_filter="", const EmberCore::String &search_text="") const
Definition Logger.cpp:169
void SetFileLoggingEnabled(bool enabled)
Definition Logger.h:70
void SetConsoleLoggingEnabled(bool enabled)
Definition Logger.h:67
LogLevel min_log_level_
Definition Logger.h:99
bool console_logging_enabled_
Definition Logger.h:105
ObserverId next_observer_id_
Definition Logger.h:102
Main types header for EmberCore.
LogLevel
Log levels for categorizing messages.
Definition Logger.h:16
std::string String
Framework-agnostic string type.
Definition String.h:14
RGBA color with 8-bit components.
Definition Color.h:10
EmberCore::Color GetLevelColor() const
Definition Logger.cpp:55
EmberCore::String FormatMessage() const
Definition Logger.cpp:40
std::chrono::system_clock::time_point timestamp
Definition Logger.h:29
EmberCore::String GetLevelString() const
Definition Logger.cpp:72
LogLevel level
Definition Logger.h:30
LogEntry(LogLevel lvl, const EmberCore::String &cat, const EmberCore::String &msg)
Definition Logger.cpp:36
EmberCore::String category
Definition Logger.h:31
EmberCore::String message
Definition Logger.h:32
EmberCore::String formatted_message
Definition Logger.h:33