32 std::cout <<
"\n=== Basic Logging Example ===\n" << std::endl;
35 auto logger_instance = std::make_shared<logger>();
38 logger_instance->add_writer(std::make_unique<console_writer>());
41 logger_instance->start();
44 logger_instance->log(log_level_type::trace, std::string(
"This is a trace message"));
45 logger_instance->log(log_level_type::debug, std::string(
"Debug information here"));
46 logger_instance->log(log_level_type::info, std::string(
"Application started successfully"));
47 logger_instance->log(log_level_type::warning, std::string(
"This is a warning"));
48 logger_instance->log(log_level_type::error, std::string(
"An error occurred!"));
49 logger_instance->log(log_level_type::critical, std::string(
"Critical system failure!"));
52 logger_instance->log(log_level_type::info, std::string(
"Message with auto-captured location"));
55 logger_instance->stop();
59 std::cout <<
"\n=== Multithreaded Logging Example ===\n" << std::endl;
62 auto logger_instance = std::make_shared<logger>(
true, 16384);
63 logger_instance->add_writer(std::make_unique<console_writer>());
64 logger_instance->start();
67 std::vector<std::thread> threads;
69 for (
int i = 0; i < 4; ++i) {
70 threads.emplace_back([logger_instance, i]() {
71 for (
int j = 0; j < 10; ++j) {
72 logger_instance->log(log_level_type::info,
73 "Thread " + std::to_string(i) +
" - Message " + std::to_string(j));
74 std::this_thread::sleep_for(std::chrono::milliseconds(10));
80 for (
auto& t : threads) {
84 logger_instance->stop();
88 std::cout <<
"\n=== Log Level Filtering Example ===\n" << std::endl;
90 auto logger_instance = std::make_shared<logger>();
91 logger_instance->add_writer(std::make_unique<console_writer>());
92 logger_instance->start();
95 logger_instance->set_level(log_level_type::info);
96 std::cout <<
"Minimum level set to INFO\n" << std::endl;
99 logger_instance->log(log_level_type::trace, std::string(
"This trace won't show"));
100 logger_instance->log(log_level_type::debug, std::string(
"This debug won't show"));
103 logger_instance->log(log_level_type::info, std::string(
"This info will show"));
104 logger_instance->log(log_level_type::warning, std::string(
"This warning will show"));
106 logger_instance->stop();
110 std::cout <<
"\n=== Sync vs Async Logging Example ===\n" << std::endl;
113 std::cout <<
"Synchronous logging:" << std::endl;
114 auto sync_logger = std::make_shared<logger>(
false);
115 sync_logger->add_writer(std::make_unique<console_writer>());
117 auto start = std::chrono::high_resolution_clock::now();
118 for (
int i = 0; i < 100; ++i) {
119 sync_logger->log(log_level_type::info,
"Sync log " + std::to_string(i));
121 auto sync_time = std::chrono::high_resolution_clock::now() - start;
124 std::cout <<
"\nAsynchronous logging:" << std::endl;
125 auto async_logger = std::make_shared<logger>(
true);
126 async_logger->add_writer(std::make_unique<console_writer>());
127 async_logger->start();
129 start = std::chrono::high_resolution_clock::now();
130 for (
int i = 0; i < 100; ++i) {
131 async_logger->log(log_level_type::info,
"Async log " + std::to_string(i));
133 auto async_time = std::chrono::high_resolution_clock::now() - start;
135 async_logger->stop();
137 std::cout <<
"\nSync time: "
138 << std::chrono::duration_cast<std::chrono::microseconds>(sync_time).count()
139 <<
" ยตs" << std::endl;
140 std::cout <<
"Async time: "
141 << std::chrono::duration_cast<std::chrono::microseconds>(async_time).count()
142 <<
" ยตs" << std::endl;