Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
custom_writer_example.cpp File Reference

Example demonstrating how to create custom writers using thread_safe_writer. More...

#include <kcenon/logger/core/logger_builder.h>
#include <kcenon/logger/writers/thread_safe_writer.h>
#include <kcenon/logger/writers/console_writer.h>
#include <kcenon/logger/formatters/json_formatter.h>
#include <kcenon/logger/interfaces/log_entry.h>
#include <kcenon/common/interfaces/logger_interface.h>
#include <iostream>
#include <vector>
#include <map>
Include dependency graph for custom_writer_example.cpp:

Go to the source code of this file.

Classes

class  memory_writer
 A custom writer that stores log entries in memory. More...
 
class  counted_console_writer
 A console writer that counts messages per log level. More...
 

Functions

int main ()
 

Detailed Description

Example demonstrating how to create custom writers using thread_safe_writer.

Definition in file custom_writer_example.cpp.

Function Documentation

◆ main()

int main ( )

Definition at line 216 of file custom_writer_example.cpp.

216 {
217 std::cout << "=== Custom Writer Example (thread_safe_writer) ===" << std::endl;
218 std::cout << std::endl;
219
220 // Example 1: Memory Writer
221 std::cout << "--- Example 1: Memory Writer ---" << std::endl;
222 {
223 auto result = logger_builder()
224 .with_min_level(kcenon::common::interfaces::log_level::info)
225 .add_writer("memory", std::make_unique<memory_writer>())
226 .build();
227
228 if (!result.has_value()) {
229 std::cerr << "Failed to create logger" << std::endl;
230 return 1;
231 }
232
233 auto logger = std::move(result.value());
234
235 // Log some messages
236 logger->log(ci::log_level::info, std::string("First message"));
237 logger->log(ci::log_level::warning, std::string("Second message"));
238 logger->log(ci::log_level::error, std::string("Third message"));
239
240 std::cout << "Logged 3 messages to memory writer" << std::endl;
241 }
242
243 std::cout << std::endl;
244
245 // Example 2: Counted Console Writer
246 std::cout << "--- Example 2: Counted Console Writer ---" << std::endl;
247 {
248 auto counted_writer = std::make_unique<counted_console_writer>();
249 auto* counted_ptr = counted_writer.get(); // Keep reference for stats
250
251 auto result = logger_builder()
252 .with_min_level(kcenon::common::interfaces::log_level::debug)
253 .add_writer("counted", std::move(counted_writer))
254 .build();
255
256 if (!result.has_value()) {
257 std::cerr << "Failed to create logger" << std::endl;
258 return 1;
259 }
260
261 auto logger = std::move(result.value());
262
263 // Log messages at different levels
264 logger->log(ci::log_level::debug, std::string("Debug message 1"));
265 logger->log(ci::log_level::debug, std::string("Debug message 2"));
266 logger->log(ci::log_level::info, std::string("Info message"));
267 logger->log(ci::log_level::warning, std::string("Warning message"));
268 logger->log(ci::log_level::error, std::string("Error message"));
269
270 // Print statistics
271 counted_ptr->print_stats();
272 }
273
274 std::cout << std::endl;
275 std::cout << "=== Custom Writer Example Complete ===" << std::endl;
276
277 return 0;
278}
Builder pattern for logger construction with validation.
logger_builder & with_min_level(log_level level)
result< std::unique_ptr< logger > > build()
logger_builder & add_writer(const std::string &name, log_writer_ptr writer)
Add a writer to the logger.

References kcenon::logger::logger_builder::add_writer(), kcenon::logger::logger_builder::build(), kcenon::logger::result< T >::has_value(), kcenon::logger::result< T >::value(), and kcenon::logger::logger_builder::with_min_level().

Here is the call graph for this function: