#include <kcenon/common/interfaces/logger_interface.h>
#include <thread>
#include <iostream>
#include <random>
namespace ci = kcenon::common::interfaces;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> level_dist(0, 5);
std::uniform_int_distribution<> message_size_dist(10, 200);
static constexpr ci::log_level levels[] = {
ci::log_level::trace,
ci::log_level::debug,
ci::log_level::info,
ci::log_level::warning,
ci::log_level::error,
ci::log_level::critical
};
for (int i = 0; i < count; ++i) {
auto level = levels[level_dist(gen)];
std::string message = "Thread " + std::to_string(thread_id) + " - Message " + std::to_string(i);
message.append(message_size_dist(gen), 'x');
log->
log(level, message);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
std::cout << "\n=== Logger Performance Metrics ===" << std::endl;
std::cout <<
"Messages logged: " << metrics.
messages_logged.load() << std::endl;
std::cout <<
"Messages dropped: " << metrics.
messages_dropped.load() << std::endl;
std::cout <<
"Total log time: " << metrics.
total_log_time_ns.load() / 1000000.0 <<
" ms" << std::endl;
std::cout <<
"Writer errors: " << metrics.
writer_errors.load() << std::endl;
std::cout <<
"Flush operations: " << metrics.
flush_operations.load() << std::endl;
}
std::cout << "\n=== Testing Basic Logging ===" << std::endl;
auto base_logger = std::make_shared<logger>(false);
base_logger->add_writer(std::make_unique<console_writer>());
base_logger->start();
base_logger->log(ci::log_level::info, std::string("User logged in - user_id: 12345, ip: 192.168.1.100"));
base_logger->log(ci::log_level::error, std::string("Database connection failed - host: db.example.com, port: 5432"));
base_logger->log(ci::log_level::debug, std::string("Retry attempt 3 of 5"));
base_logger->stop();
}
auto logger = std::make_unique<logger_module::logger>(
true, 1024);
logger->add_writer(std::make_unique<console_writer>());
auto enable_result =
logger->enable_metrics_collection(
true);
if (enable_result.is_err()) {
std::cerr << "Failed to enable metrics collection" << std::endl;
}
std::cout << "Starting logger metrics demo..." << std::endl;
std::cout << "Generating logs from multiple threads..." << std::endl;
std::vector<std::thread> threads;
for (int i = 0; i < 4; ++i) {
}
for (auto& t : threads) {
t.join();
}
std::this_thread::sleep_for(std::chrono::seconds(1));
auto metrics_result =
logger->get_current_metrics();
if (metrics_result.has_value()) {
} else {
std::cerr << "Failed to get metrics" << std::endl;
}
std::cout << "\nDemo completed!" << std::endl;
return 0;
}
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()