20#include <kcenon/common/interfaces/logger_interface.h>
27namespace ci = kcenon::common::interfaces;
30 std::random_device rd;
31 std::mt19937 gen(rd());
32 std::uniform_int_distribution<> level_dist(0, 5);
33 std::uniform_int_distribution<> message_size_dist(10, 200);
36 static constexpr ci::log_level levels[] = {
40 ci::log_level::warning,
42 ci::log_level::critical
45 for (
int i = 0; i < count; ++i) {
46 auto level = levels[level_dist(gen)];
49 std::string message =
"Thread " + std::to_string(thread_id) +
" - Message " + std::to_string(i);
50 message.append(message_size_dist(gen),
'x');
52 log->
log(level, message);
54 std::this_thread::sleep_for(std::chrono::milliseconds(10));
59 std::cout <<
"\n=== Logger Performance Metrics ===" << std::endl;
60 std::cout <<
"Messages logged: " << metrics.
messages_logged.load() << std::endl;
61 std::cout <<
"Messages dropped: " << metrics.
messages_dropped.load() << std::endl;
62 std::cout <<
"Total log time: " << metrics.
total_log_time_ns.load() / 1000000.0 <<
" ms" << std::endl;
66 std::cout <<
"Writer errors: " << metrics.
writer_errors.load() << std::endl;
67 std::cout <<
"Flush operations: " << metrics.
flush_operations.load() << std::endl;
72 std::cout <<
"\n=== Testing Basic Logging ===" << std::endl;
74 auto base_logger = std::make_shared<logger>(
false);
75 base_logger->add_writer(std::make_unique<console_writer>());
79 base_logger->log(ci::log_level::info, std::string(
"User logged in - user_id: 12345, ip: 192.168.1.100"));
80 base_logger->log(ci::log_level::error, std::string(
"Database connection failed - host: db.example.com, port: 5432"));
81 base_logger->log(ci::log_level::debug, std::string(
"Retry attempt 3 of 5"));
88 auto logger = std::make_unique<logger_module::logger>(
true, 1024);
91 logger->add_writer(std::make_unique<console_writer>());
94 auto enable_result =
logger->enable_metrics_collection(
true);
95 if (enable_result.is_err()) {
96 std::cerr <<
"Failed to enable metrics collection" << std::endl;
102 std::cout <<
"Starting logger metrics demo..." << std::endl;
103 std::cout <<
"Generating logs from multiple threads..." << std::endl;
106 std::vector<std::thread> threads;
107 for (
int i = 0; i < 4; ++i) {
112 for (
auto& t : threads) {
117 std::this_thread::sleep_for(std::chrono::seconds(1));
120 auto metrics_result =
logger->get_current_metrics();
121 if (metrics_result.has_value()) {
124 std::cerr <<
"Failed to get metrics" << std::endl;
133 std::cout <<
"\nDemo completed!" << std::endl;
common::VoidResult log(common::interfaces::log_level level, const std::string &message) override
Log a message with specified level (ILogger interface)
Console writer for logging to stdout/stderr.
High-performance, thread-safe logging system with asynchronous capabilities.
Common types and enumerations for logger system.
void print_metrics(const logger_metrics &metrics)
void generate_logs(logger *log, int thread_id, int count)
void test_structured_logging()