FinanceSim 0.1.0
Financial Simulation Library
Loading...
Searching...
No Matches
logger.cpp
Go to the documentation of this file.
1#include "core/logger.hpp"
2
3namespace financesim {
4
5Logger::Logger() = default;
6
8 detach();
9 flush();
10 for (auto& writer : writers_) {
11 writer->close();
12 }
13}
14
16 level_ = level;
17}
18
20 writers_.push_back(std::move(writer));
21}
22
24 for (auto& writer : writers_) {
25 writer->close();
26 }
27 writers_.clear();
28}
29
30void Logger::add_type_filter(const std::string& type_name) {
31 type_filters_.insert(type_name);
32}
33
37
38void Logger::add_source_filter(const std::string& source_id) {
39 source_filters_.insert(source_id);
40}
41
45
47 time_start_ = start;
48 time_end_ = end;
50}
51
55
57 if (subscription_id_ != 0) {
58 detach();
59 }
60 bus_ = &bus;
62 [this](const EventPtr& event) { on_event(event); }
63 );
64}
65
67 if (bus_ && subscription_id_ != 0) {
69 }
70 bus_ = nullptr;
72}
73
75 for (auto& writer : writers_) {
76 writer->flush();
77 }
78}
79
80void Logger::on_event(const EventPtr& event) {
81 if (!event) return;
82 if (!passes_filters(*event)) return;
83
84 LogLevel event_level = classify_event(*event);
85 if (event_level < level_) return;
86
87 for (auto& writer : writers_) {
88 writer->write(*event, event_level);
89 }
90}
91
92bool Logger::passes_filters(const Event& event) const {
93 // Type filter
94 if (!type_filters_.empty()) {
95 if (type_filters_.find(event.type_name()) == type_filters_.end()) {
96 return false;
97 }
98 }
99
100 // Source filter
101 if (!source_filters_.empty()) {
102 if (source_filters_.find(event.source_id()) == source_filters_.end()) {
103 return false;
104 }
105 }
106
107 // Time filter
109 SimTime t = event.timestamp();
110 if (t < time_start_ || t > time_end_) {
111 return false;
112 }
113 }
114
115 return true;
116}
117
119 // For now, all events are INFO level
120 // Could be extended to classify different event types at different levels
121 return LogLevel::INFO;
122}
123
124} // namespace financesim
SubscriptionId subscribe_all(EventCallback callback)
Subscribe to all events.
Definition event_bus.hpp:45
void unsubscribe(SubscriptionId id)
Unsubscribe using subscription ID.
Definition event_bus.hpp:52
Base class for all typed events in the simulation.
Definition event.hpp:10
const std::string & source_id() const
Source model ID that generated this event.
Definition event.hpp:21
virtual const char * type_name() const =0
Returns the type name of this event (for debugging/logging)
LogLevel classify_event(const Event &event) const
Definition logger.cpp:118
std::set< std::string > source_filters_
Definition logger.hpp:76
void add_type_filter(const std::string &type_name)
Definition logger.cpp:30
bool time_filter_active_
Definition logger.hpp:79
void add_writer(LogWriterPtr writer)
Add a writer for output (Logger takes ownership via shared_ptr)
Definition logger.cpp:19
EventBus * bus_
Definition logger.hpp:81
SimTime time_start_
Definition logger.hpp:77
void detach()
Detach from the current EventBus (stops logging)
Definition logger.cpp:66
void add_source_filter(const std::string &source_id)
Definition logger.cpp:38
void clear_writers()
Remove all writers.
Definition logger.cpp:23
std::set< std::string > type_filters_
Definition logger.hpp:75
void set_time_range(SimTime start, SimTime end)
Set time range filter.
Definition logger.cpp:46
void on_event(const EventPtr &event)
Definition logger.cpp:80
LogLevel level() const
Get the current log level.
Definition logger.hpp:28
SimTime time_end_
Definition logger.hpp:78
void set_level(LogLevel level)
Set the minimum log level (events below this level are ignored)
Definition logger.cpp:15
void clear_type_filters()
Clear all type filters (log all types)
Definition logger.cpp:34
void attach(EventBus &bus)
Attach to an EventBus (starts logging)
Definition logger.cpp:56
LogLevel level_
Definition logger.hpp:73
bool passes_filters(const Event &event) const
Definition logger.cpp:92
void clear_source_filters()
Clear all source filters (log all sources)
Definition logger.cpp:42
void flush()
Flush all writers.
Definition logger.cpp:74
std::vector< LogWriterPtr > writers_
Definition logger.hpp:74
void clear_time_range()
Clear time range filter.
Definition logger.cpp:52
SubscriptionId subscription_id_
Definition logger.hpp:82
double SimTime
Represents a point in simulation time (continuous, in days)
Definition time.hpp:6
std::shared_ptr< LogWriter > LogWriterPtr
std::shared_ptr< const Event > EventPtr
Definition event.hpp:32
LogLevel
Log severity levels for filtering.
Definition log_level.hpp:6