#include <kcenon/common/interfaces/logger_interface.h>
namespace ci = kcenon::common::interfaces;
#include <thread>
#include <vector>
#include <iostream>
#include <chrono>
std::cout << "\n=== Basic Logging Example ===\n" << std::endl;
auto logger_instance = std::make_shared<logger>();
logger_instance->add_writer(std::make_unique<console_writer>());
logger_instance->start();
logger_instance->log(log_level_type::trace, std::string("This is a trace message"));
logger_instance->log(log_level_type::debug, std::string("Debug information here"));
logger_instance->log(log_level_type::info, std::string("Application started successfully"));
logger_instance->log(log_level_type::warning, std::string("This is a warning"));
logger_instance->log(log_level_type::error, std::string("An error occurred!"));
logger_instance->log(log_level_type::critical, std::string("Critical system failure!"));
logger_instance->log(log_level_type::info, std::string("Message with auto-captured location"));
logger_instance->stop();
}
std::cout << "\n=== Multithreaded Logging Example ===\n" << std::endl;
auto logger_instance = std::make_shared<logger>(true, 16384);
logger_instance->add_writer(std::make_unique<console_writer>());
logger_instance->start();
std::vector<std::thread> threads;
for (int i = 0; i < 4; ++i) {
threads.emplace_back([logger_instance, i]() {
for (int j = 0; j < 10; ++j) {
logger_instance->log(log_level_type::info,
"Thread " + std::to_string(i) + " - Message " + std::to_string(j));
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
});
}
for (auto& t : threads) {
t.join();
}
logger_instance->stop();
}
std::cout << "\n=== Log Level Filtering Example ===\n" << std::endl;
auto logger_instance = std::make_shared<logger>();
logger_instance->add_writer(std::make_unique<console_writer>());
logger_instance->start();
logger_instance->set_level(log_level_type::info);
std::cout << "Minimum level set to INFO\n" << std::endl;
logger_instance->log(log_level_type::trace, std::string("This trace won't show"));
logger_instance->log(log_level_type::debug, std::string("This debug won't show"));
logger_instance->log(log_level_type::info, std::string("This info will show"));
logger_instance->log(log_level_type::warning, std::string("This warning will show"));
logger_instance->stop();
}
std::cout << "\n=== Sync vs Async Logging Example ===\n" << std::endl;
std::cout << "Synchronous logging:" << std::endl;
auto sync_logger = std::make_shared<logger>(false);
sync_logger->add_writer(std::make_unique<console_writer>());
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 100; ++i) {
sync_logger->log(log_level_type::info, "Sync log " + std::to_string(i));
}
auto sync_time = std::chrono::high_resolution_clock::now() - start;
std::cout << "\nAsynchronous logging:" << std::endl;
auto async_logger = std::make_shared<logger>(true);
async_logger->add_writer(std::make_unique<console_writer>());
async_logger->start();
start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 100; ++i) {
async_logger->log(log_level_type::info, "Async log " + std::to_string(i));
}
auto async_time = std::chrono::high_resolution_clock::now() - start;
async_logger->stop();
std::cout << "\nSync time: "
<< std::chrono::duration_cast<std::chrono::microseconds>(sync_time).count()
<< " ยตs" << std::endl;
std::cout << "Async time: "
<< std::chrono::duration_cast<std::chrono::microseconds>(async_time).count()
<< " ยตs" << std::endl;
}
try {
std::cout << "\n=== All examples completed successfully! ===" << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
return 0;
}
void basic_logging_example()
ci::log_level log_level_type
void log_level_filtering_example()
void multithreaded_logging_example()
void sync_vs_async_example()
Console writer for logging to stdout/stderr.
High-performance, thread-safe logging system with asynchronous capabilities.