Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
console_logger Class Reference

Simple console logger implementing ILogger interface. More...

Inheritance diagram for console_logger:
Inheritance graph
Collaboration diagram for console_logger:
Collaboration graph

Public Member Functions

common::VoidResult log (log_level level, const std::string &message) override
 
common::VoidResult log (log_level level, const std::string &message, const std::string &file, int line, const std::string &function) override
 
common::VoidResult log (const log_entry &entry) override
 
bool is_enabled (log_level level) const override
 
common::VoidResult set_level (log_level level) override
 
log_level get_level () const override
 
common::VoidResult flush () override
 
common::Result< metrics_snapshotget_monitoring_data () override
 
common::Result< health_check_resulthealth_check () override
 
std::string get_component_name () const override
 
void set_monitor (std::shared_ptr< IMonitor > monitor)
 
int get_message_count () const
 

Private Attributes

std::atomic< int > message_count_ {0}
 
log_level min_level_ {log_level::info}
 
std::shared_ptr< IMonitor > monitor_
 

Detailed Description

Simple console logger implementing ILogger interface.

This demonstrates that ANY implementation of ILogger can work with monitoring_system, not just logger_system's logger class.

Examples
bidirectional_di_example.cpp.

Definition at line 37 of file bidirectional_di_example.cpp.

Member Function Documentation

◆ flush()

common::VoidResult console_logger::flush ( )
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 97 of file bidirectional_di_example.cpp.

97 {
98 std::cout.flush();
99 return std::monostate{};
100 }

◆ get_component_name()

std::string console_logger::get_component_name ( ) const
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 119 of file bidirectional_di_example.cpp.

119 {
120 return "console_logger";
121 }

◆ get_level()

log_level console_logger::get_level ( ) const
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 93 of file bidirectional_di_example.cpp.

93 {
94 return min_level_;
95 }

References min_level_.

◆ get_message_count()

int console_logger::get_message_count ( ) const
inline
Examples
bidirectional_di_example.cpp.

Definition at line 128 of file bidirectional_di_example.cpp.

128 {
129 return message_count_.load();
130 }
std::atomic< int > message_count_

References message_count_.

◆ get_monitoring_data()

common::Result< metrics_snapshot > console_logger::get_monitoring_data ( )
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 103 of file bidirectional_di_example.cpp.

103 {
104 metrics_snapshot snapshot;
105 snapshot.source_id = "console_logger";
106 snapshot.add_metric("total_messages", message_count_.load());
107 snapshot.add_metric("is_enabled", is_enabled(log_level::info) ? 1.0 : 0.0);
108 return snapshot;
109 }
bool is_enabled(log_level level) const override
Complete snapshot of metrics at a point in time.
void add_metric(const std::string &name, double value)
Add a metric to the snapshot.

References kcenon::monitoring::metrics_snapshot::add_metric(), is_enabled(), message_count_, and kcenon::monitoring::metrics_snapshot::source_id.

Here is the call graph for this function:

◆ health_check()

common::Result< health_check_result > console_logger::health_check ( )
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 111 of file bidirectional_di_example.cpp.

111 {
112 health_check_result result;
113 result.status = health_status::healthy;
114 result.message = "Console logger operational";
115 result.metadata["message_count"] = std::to_string(message_count_.load());
116 return result;
117 }
Result of a health check operation.
std::unordered_map< std::string, std::string > metadata

References kcenon::monitoring::health_check_result::message, message_count_, kcenon::monitoring::health_check_result::metadata, and kcenon::monitoring::health_check_result::status.

◆ is_enabled()

bool console_logger::is_enabled ( log_level level) const
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 84 of file bidirectional_di_example.cpp.

84 {
85 return level >= min_level_;
86 }

References min_level_.

Referenced by get_monitoring_data().

Here is the caller graph for this function:

◆ log() [1/3]

common::VoidResult console_logger::log ( const log_entry & entry)
inlineoverride

Definition at line 80 of file bidirectional_di_example.cpp.

80 {
81 return log(entry.level, entry.message, entry.file, entry.line, entry.function);
82 }
common::VoidResult log(log_level level, const std::string &message) override

References log().

Here is the call graph for this function:

◆ log() [2/3]

common::VoidResult console_logger::log ( log_level level,
const std::string & message )
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 44 of file bidirectional_di_example.cpp.

44 {
45 if (level < min_level_) {
46 return std::monostate{};
47 }
48
50
51 auto now = std::chrono::system_clock::now();
52 auto time_t = std::chrono::system_clock::to_time_t(now);
53 std::tm tm{};
54#ifdef _MSC_VER
55 localtime_s(&tm, &time_t);
56#else
57 localtime_r(&time_t, &tm);
58#endif
59
60 std::cout << "[" << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << "] "
61 << "[" << to_string(level) << "] "
62 << message << std::endl;
63
64 // If monitor is injected, record logging metrics
65 if (monitor_) {
66 monitor_->record_metric("messages_logged", message_count_.load());
67 }
68
69 return std::monostate{};
70 }
std::shared_ptr< IMonitor > monitor_
auto to_string(plugin_load_error error) -> std::string
Convert plugin_load_error to string.

References message_count_, min_level_, monitor_, and kcenon::monitoring::to_string().

Referenced by log(), and log().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ log() [3/3]

common::VoidResult console_logger::log ( log_level level,
const std::string & message,
const std::string & file,
int line,
const std::string & function )
inlineoverride

Definition at line 72 of file bidirectional_di_example.cpp.

74 {
75 std::string detailed_message = message + " [" + file + ":" +
76 std::to_string(line) + " in " + function + "]";
77 return log(level, detailed_message);
78 }

References log().

Here is the call graph for this function:

◆ set_level()

common::VoidResult console_logger::set_level ( log_level level)
inlineoverride
Examples
bidirectional_di_example.cpp.

Definition at line 88 of file bidirectional_di_example.cpp.

88 {
89 min_level_ = level;
90 return std::monostate{};
91 }

References min_level_.

◆ set_monitor()

void console_logger::set_monitor ( std::shared_ptr< IMonitor > monitor)
inline
Examples
bidirectional_di_example.cpp.

Definition at line 124 of file bidirectional_di_example.cpp.

124 {
125 monitor_ = std::move(monitor);
126 }

References monitor_.

Member Data Documentation

◆ message_count_

std::atomic<int> console_logger::message_count_ {0}
private

◆ min_level_

log_level console_logger::min_level_ {log_level::info}
private
Examples
bidirectional_di_example.cpp.

Definition at line 40 of file bidirectional_di_example.cpp.

40{log_level::info};

Referenced by get_level(), is_enabled(), log(), and set_level().

◆ monitor_

std::shared_ptr<IMonitor> console_logger::monitor_
private
Examples
bidirectional_di_example.cpp.

Definition at line 41 of file bidirectional_di_example.cpp.

Referenced by log(), and set_monitor().


The documentation for this class was generated from the following file: