Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::logger_builder Class Reference

Builder pattern for logger construction with validation. More...

#include <logger_builder.h>

Collaboration diagram for kcenon::logger::logger_builder:
Collaboration graph

Public Member Functions

 logger_builder ()
 
logger_builderwith_config (const logger_config &config)
 
logger_builderwith_async (bool async=true)
 
logger_builderwith_buffer_size (std::size_t size)
 Set buffer size.
 
logger_builderwith_min_level (log_level level)
 
logger_builderwith_batch_size (std::size_t size)
 Set batch size for processing.
 
logger_builderwith_batch_writing (bool enable=true)
 Enable batch writing for writers.
 
logger_builderwith_flush_interval (std::chrono::milliseconds interval)
 Set flush interval.
 
logger_builderwith_lock_free (bool enable=true)
 Enable lock-free queue.
 
logger_builderwith_metrics (bool enable=true)
 Enable metrics collection.
 
logger_builderwith_crash_handler (bool enable=true)
 Enable crash handler.
 
logger_builderwith_structured_logging (bool enable=true)
 Enable structured logging.
 
logger_builderwith_overflow_policy (logger_config::overflow_policy policy)
 Set queue overflow policy.
 
logger_builderwith_max_queue_size (std::size_t size)
 Set max queue size.
 
logger_builderwith_file_output (const std::string &directory, const std::string &prefix="app", std::size_t max_size=100 *1024 *1024, std::size_t max_count=5)
 Configure file output.
 
logger_builderwith_network_output (const std::string &host, uint16_t port, std::chrono::milliseconds timeout=std::chrono::milliseconds(5000))
 Configure network output.
 
logger_builderadd_writer (const std::string &name, log_writer_ptr writer)
 Add a writer to the logger.
 
logger_builderadd_filter (std::unique_ptr< log_filter_interface > filter)
 
logger_builderadd_level_filter (log_level min_level)
 Add a level filter (convenience method)
 
logger_builderadd_regex_filter (const std::string &pattern, bool include_matches=true)
 Add a regex filter (convenience method)
 
logger_builderadd_function_filter (std::function< bool(const log_entry &)> predicate)
 Add a function-based filter (convenience method)
 
logger_builderwith_route (routing::route_config config)
 
logger_builderwith_exclusive_routing (bool exclusive=true)
 Set exclusive routing mode.
 
logger_builderroute_level (log_level level, const std::vector< std::string > &writer_names, bool stop_propagation=false)
 
logger_builderroute_pattern (const std::string &pattern, const std::vector< std::string > &writer_names, bool stop_propagation=false)
 
logger_builderwith_formatter (std::unique_ptr< log_formatter_interface > formatter)
 Set formatter for the logger.
 
logger_builderuse_template (const std::string &name)
 
logger_builderapply_strategy (std::unique_ptr< config_strategy_interface > strategy)
 Apply a configuration strategy.
 
logger_builderfor_environment (deployment_env env)
 Configure for a specific deployment environment.
 
logger_builderwith_performance_tuning (performance_level level)
 Apply performance tuning.
 
logger_builderauto_configure ()
 Auto-configure from environment variables.
 
logger_builderclear_strategies ()
 Clear all registered strategies.
 
logger_builderdetect_environment ()
 Detect environment from environment variables.
 
logger_builderwith_monitoring (std::shared_ptr< common::interfaces::IMonitor > monitor)
 Set monitoring interface (Phase 2.2.4)
 
logger_builderwith_health_check_interval (std::chrono::milliseconds interval)
 Set health check interval.
 
logger_builderwith_backend (std::unique_ptr< backends::integration_backend > backend)
 Set integration backend explicitly.
 
logger_builderwith_standalone_backend ()
 Use standalone backend explicitly.
 
logger_builderwith_error_handler (std::function< void(const logger_error_code &)> handler)
 Set error handler.
 
logger_builderwith_default_pattern ()
 Use default pattern for logging.
 
logger_builderwith_sampler (std::unique_ptr< sampling::log_sampler > sampler)
 
logger_builderwith_sampling (const sampling::sampling_config &config)
 
result< std::unique_ptr< logger > > build ()
 
const logger_configget_config () const
 Get the current configuration (for inspection)
 
common::VoidResult validate () const
 Validate current configuration without building.
 

Private Attributes

logger_config config_
 
std::vector< std::pair< std::string, log_writer_ptr > > writers_
 
std::vector< std::unique_ptr< log_filter_interface > > filters_
 
std::vector< routing::route_configroutes_
 
bool exclusive_routing_ = false
 
std::unique_ptr< log_formatter_interfaceformatter_
 
std::unique_ptr< backends::integration_backendbackend_
 
std::vector< std::unique_ptr< config_strategy_interface > > strategies_
 
logger_config built_config_
 
std::shared_ptr< common::interfaces::IMonitor > monitor_
 
std::chrono::milliseconds health_check_interval_ {1000}
 
std::function< void(const logger_error_code &)> error_handler_
 
std::unique_ptr< sampling::log_samplersampler_
 

Detailed Description

Builder pattern for logger construction with validation.

The logger_builder class provides a fluent interface for constructing logger instances with complex configurations. It ensures configuration validity, applies optimization strategies, and handles the complexity of logger initialization.

Key features:

  • Fluent interface for intuitive configuration
  • Automatic validation of configuration parameters
  • Support for configuration templates and strategies
  • Environment-based auto-configuration
  • Integration with dependency injection containers
  • Performance tuning presets
Note
All builder methods return a reference to the builder for method chaining.
Warning
The build() method consumes writers and filters. After calling build(), the builder should not be reused without adding new writers.
Since
1.0.0
Examples
critical_logging_example.cpp, custom_writer_example.cpp, di_pattern_example.cpp, and monitoring_integration_example.cpp.

Definition at line 116 of file logger_builder.h.

Constructor & Destructor Documentation

◆ logger_builder()

kcenon::logger::logger_builder::logger_builder ( )
inline

Member Function Documentation

◆ add_filter()

logger_builder & kcenon::logger::logger_builder::add_filter ( std::unique_ptr< log_filter_interface > filter)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 375 of file logger_builder.h.

375 {
376 if (filter) {
377 filters_.push_back(std::move(filter));
378 }
379 return *this;
380 }
std::vector< std::unique_ptr< log_filter_interface > > filters_

References filters_.

◆ add_function_filter()

logger_builder & kcenon::logger::logger_builder::add_function_filter ( std::function< bool(const log_entry &)> predicate)
inline

Add a function-based filter (convenience method)

Parameters
predicateFunction that returns true for entries that should pass
Returns
Reference to builder for chaining
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 414 of file logger_builder.h.

414 {
415 filters_.push_back(std::make_unique<filters::function_filter>(std::move(predicate)));
416 return *this;
417 }

References filters_.

◆ add_level_filter()

logger_builder & kcenon::logger::logger_builder::add_level_filter ( log_level min_level)
inline

Add a level filter (convenience method)

Parameters
min_levelMinimum log level to pass through
Returns
Reference to builder for chaining
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 389 of file logger_builder.h.

389 {
390 filters_.push_back(std::make_unique<filters::level_filter>(min_level));
391 return *this;
392 }

References filters_.

◆ add_regex_filter()

logger_builder & kcenon::logger::logger_builder::add_regex_filter ( const std::string & pattern,
bool include_matches = true )
inline

Add a regex filter (convenience method)

Parameters
patternRegex pattern to match against log messages
include_matchesIf true, only matching messages pass; if false, non-matching pass
Returns
Reference to builder for chaining
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 402 of file logger_builder.h.

402 {
403 filters_.push_back(std::make_unique<filters::regex_filter>(pattern, include_matches));
404 return *this;
405 }

References filters_.

◆ add_writer()

logger_builder & kcenon::logger::logger_builder::add_writer ( const std::string & name,
log_writer_ptr writer )
inline

Add a writer to the logger.

Parameters
nameWriter name
writerWriter instance
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h, critical_logging_example.cpp, and custom_writer_example.cpp.

Definition at line 352 of file logger_builder.h.

352 {
353 writers_.push_back({name, std::move(writer)});
354 return *this;
355 }
std::vector< std::pair< std::string, log_writer_ptr > > writers_

References writers_.

Referenced by example_production_setup(), and main().

Here is the caller graph for this function:

◆ apply_strategy()

logger_builder & kcenon::logger::logger_builder::apply_strategy ( std::unique_ptr< config_strategy_interface > strategy)
inline

Apply a configuration strategy.

Parameters
strategyStrategy to apply during build
Returns
Reference to builder for chaining

Strategies are applied in priority order during build(). Higher priority strategies are applied first.

Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 586 of file logger_builder.h.

586 {
587 if (strategy) {
588 strategies_.push_back(std::move(strategy));
589 }
590 return *this;
591 }
std::vector< std::unique_ptr< config_strategy_interface > > strategies_

References strategies_.

Referenced by auto_configure(), for_environment(), and with_performance_tuning().

Here is the caller graph for this function:

◆ auto_configure()

logger_builder & kcenon::logger::logger_builder::auto_configure ( )
inline

Auto-configure from environment variables.

Returns
Reference to builder for chaining

Reads LOG_* environment variables and applies them:

  • LOG_LEVEL, LOG_ASYNC, LOG_BUFFER_SIZE, LOG_BATCH_SIZE
  • LOG_FLUSH_INTERVAL, LOG_COLOR, LOG_METRICS
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 637 of file logger_builder.h.

637 {
638 auto strategy = std::make_unique<environment_strategy>();
639 if (strategy->is_applicable()) {
640 apply_strategy(std::move(strategy));
641 }
642 return *this;
643 }
logger_builder & apply_strategy(std::unique_ptr< config_strategy_interface > strategy)
Apply a configuration strategy.

References apply_strategy().

Here is the call graph for this function:

◆ build()

result< std::unique_ptr< logger > > kcenon::logger::logger_builder::build ( )
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h, custom_writer_example.cpp, di_pattern_example.cpp, and monitoring_integration_example.cpp.

Definition at line 940 of file logger_builder.h.

940 {
941 // Apply all strategies in priority order (highest first)
942 if (!strategies_.empty()) {
943 // Sort strategies by priority (descending)
944 std::sort(strategies_.begin(), strategies_.end(),
945 [](const auto& a, const auto& b) {
946 return a->priority() > b->priority();
947 });
948
949 // Apply each applicable strategy
950 for (const auto& strategy : strategies_) {
951 if (strategy->is_applicable()) {
952 strategy->apply(config_);
953 }
954 }
955 }
956
957 // Validate configuration
958 if (auto validation = config_.validate(); validation.is_err()) {
959 return result<std::unique_ptr<logger>>{
961 "Configuration validation failed"};
962 }
963
964 // Validate writer count
965 if (!writers_.empty() && writers_.size() > config_.max_writers) {
966 return result<std::unique_ptr<logger>>{
968 "Number of writers exceeds max_writers configuration"};
969 }
970
971 // Auto-detect backend if not explicitly set
972 // Users can provide thread_system_backend or other backends via with_backend()
973 if (!backend_) {
974 backend_ = std::make_unique<backends::standalone_backend>();
975 }
976
977 // Create logger with validated configuration
978 auto logger_instance = std::make_unique<logger>(config_.async, config_.buffer_size, std::move(backend_));
979
980 // Apply configuration settings
981 logger_instance->set_level(config_.min_level);
982
984 logger_instance->enable_metrics_collection(true);
985 }
986
987 // Add writers (apply batch writing if enabled)
988 for (auto& [name, writer] : writers_) {
989 if (writer) {
990 // Set color output if the writer supports it (console_writer)
991 if (auto* console = dynamic_cast<console_writer*>(writer.get())) {
992 console->set_use_color(config_.enable_color_output);
993 }
994
995 // Wrap with batch writer if enabled and async mode
997 batch_writer::config batch_cfg;
998 batch_cfg.max_batch_size = config_.batch_size;
999 batch_cfg.flush_interval = config_.flush_interval;
1000
1001 auto batch_wrapped = std::make_unique<batch_writer>(
1002 std::move(writer), batch_cfg
1003 );
1004 logger_instance->add_writer(name, std::move(batch_wrapped));
1005 } else {
1006 logger_instance->add_writer(name, std::move(writer));
1007 }
1008 }
1009 }
1010
1011 // Apply filters if any were added
1012 if (!filters_.empty()) {
1013 // Create composite filter if multiple filters
1014 if (filters_.size() == 1) {
1015 logger_instance->set_filter(std::move(filters_[0]));
1016 } else {
1017 auto composite = std::make_unique<filters::composite_filter>(filters::composite_filter::logic_type::AND);
1018 for (auto& filter : filters_) {
1019 composite->add_filter(std::move(filter));
1020 }
1021 logger_instance->set_filter(std::move(composite));
1022 }
1023 }
1024 filters_.clear(); // Clear after moving
1025
1026 // Apply routing configuration
1027 if (!routes_.empty()) {
1028 auto& router = logger_instance->get_router();
1029 router.set_exclusive_routes(exclusive_routing_);
1030 for (auto& route : routes_) {
1031 router.add_route(std::move(route));
1032 }
1033 }
1034 routes_.clear(); // Clear after moving
1035
1036 // Apply real-time analyzer if configured
1037#ifdef LOGGER_WITH_ANALYSIS
1038 if (realtime_analyzer_) {
1039 logger_instance->set_realtime_analyzer(std::move(realtime_analyzer_));
1040 }
1041#endif // LOGGER_WITH_ANALYSIS
1042
1043 // Apply sampler if configured
1044 if (sampler_) {
1045 logger_instance->set_sampler(std::move(sampler_));
1046 }
1047
1048 // Start logger if async
1049 if (config_.async) {
1050 logger_instance->start();
1051 }
1052
1053 // Store configuration in logger (if we add a config getter)
1055
1056 // Return logger instance (NRVO will be applied automatically)
1057 return logger_instance;
1058 }
std::unique_ptr< sampling::log_sampler > sampler_
std::vector< routing::route_config > routes_
std::unique_ptr< backends::integration_backend > backend_
log_level min_level
Minimum log level to process.
std::size_t batch_size
Number of messages per batch write.
common::VoidResult validate() const
Validate the configuration.
bool enable_batch_writing
Enable batch writing mode.
bool async
Enable asynchronous logging.
bool enable_color_output
Enable ANSI color output.
bool enable_metrics
Enable performance metrics collection.
std::chrono::milliseconds flush_interval
Interval between automatic flushes.
std::size_t buffer_size
Internal buffer size in bytes.
std::size_t max_writers
Maximum number of concurrent writers.

References kcenon::logger::filters::composite_filter::AND, kcenon::logger::logger_config::async, backend_, kcenon::logger::logger_config::batch_size, kcenon::logger::logger_config::buffer_size, built_config_, kcenon::logger::composite, config_, kcenon::logger::logger_config::enable_batch_writing, kcenon::logger::logger_config::enable_color_output, kcenon::logger::logger_config::enable_metrics, exclusive_routing_, filters_, kcenon::logger::batch_writer::config::flush_interval, kcenon::logger::logger_config::flush_interval, kcenon::logger::invalid_configuration, kcenon::logger::batch_writer::config::max_batch_size, kcenon::logger::logger_config::max_writers, kcenon::logger::logger_config::min_level, routes_, sampler_, strategies_, kcenon::logger::logger_config::validate(), and writers_.

Referenced by example_1_basic_di_pattern(), example_1_basic_integration(), example_2_multiple_loggers(), example_2_optional_monitor(), example_3_imonitorable_interface(), example_3_runtime_monitor_injection(), example_4_monitor_swapping(), example_4_monitoring_system_simulation(), example_5_interface_based_usage(), and main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear_strategies()

logger_builder & kcenon::logger::logger_builder::clear_strategies ( )
inline

Clear all registered strategies.

Returns
Reference to builder for chaining
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 651 of file logger_builder.h.

651 {
652 strategies_.clear();
653 return *this;
654 }

References strategies_.

◆ detect_environment()

logger_builder & kcenon::logger::logger_builder::detect_environment ( )
inline

Detect environment from environment variables.

Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 661 of file logger_builder.h.

661 {
662 const char* env = std::getenv("LOG_ENV");
663 const char* level = std::getenv("LOG_LEVEL");
664
665 if (env) {
666 std::string env_str(env);
667 if (env_str == "production") {
668 use_template("production");
669 } else if (env_str == "debug" || env_str == "development") {
670 use_template("debug");
671 }
672 }
673
674 if (level) {
675 std::string level_str(level);
676 if (level_str == "trace") config_.min_level = log_level::trace;
677 else if (level_str == "debug") config_.min_level = log_level::debug;
678 else if (level_str == "info") config_.min_level = log_level::info;
679 else if (level_str == "warn") config_.min_level = log_level::warning;
680 else if (level_str == "error") config_.min_level = log_level::error;
681 else if (level_str == "fatal") config_.min_level = log_level::critical;
682 }
683
684 return *this;
685 }
logger_builder & use_template(const std::string &name)

References config_, kcenon::logger::logger_config::min_level, and use_template().

Here is the call graph for this function:

◆ for_environment()

logger_builder & kcenon::logger::logger_builder::for_environment ( deployment_env env)
inline

Configure for a specific deployment environment.

Parameters
envDeployment environment type
Returns
Reference to builder for chaining

Applies pre-configured settings optimized for the environment:

  • development: Verbose, colored, synchronous
  • staging: JSON, file + console, rotation
  • production: Optimized, warning+, crash protection
  • testing: Memory buffer, synchronous
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 606 of file logger_builder.h.

606 {
607 return apply_strategy(std::make_unique<deployment_strategy>(env));
608 }

References apply_strategy().

Here is the call graph for this function:

◆ get_config()

const logger_config & kcenon::logger::logger_builder::get_config ( ) const
inline

Get the current configuration (for inspection)

Returns
Current configuration
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 1064 of file logger_builder.h.

1064 {
1065 return config_;
1066 }

References config_.

◆ route_level()

logger_builder & kcenon::logger::logger_builder::route_level ( log_level level,
const std::vector< std::string > & writer_names,
bool stop_propagation = false )
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 484 of file logger_builder.h.

486 {
487 routing::route_config config;
488 config.writer_names = writer_names;
489 config.filter = std::make_unique<filters::level_filter>(level);
490 config.stop_propagation = stop_propagation;
491 routes_.push_back(std::move(config));
492 return *this;
493 }

References kcenon::logger::routing::route_config::filter, routes_, kcenon::logger::routing::route_config::stop_propagation, and kcenon::logger::routing::route_config::writer_names.

◆ route_pattern()

logger_builder & kcenon::logger::logger_builder::route_pattern ( const std::string & pattern,
const std::vector< std::string > & writer_names,
bool stop_propagation = false )
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 513 of file logger_builder.h.

515 {
516 routing::route_config config;
517 config.writer_names = writer_names;
518 config.filter = std::make_unique<filters::regex_filter>(pattern, true);
519 config.stop_propagation = stop_propagation;
520 routes_.push_back(std::move(config));
521 return *this;
522 }

References kcenon::logger::routing::route_config::filter, routes_, kcenon::logger::routing::route_config::stop_propagation, and kcenon::logger::routing::route_config::writer_names.

◆ use_template()

logger_builder & kcenon::logger::logger_builder::use_template ( const std::string & name)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 560 of file logger_builder.h.

560 {
561 // Use built-in logger_config templates
562 if (name == "high_performance") {
564 } else if (name == "low_latency") {
566 } else if (name == "debug") {
568 } else if (name == "production") {
570 } else {
572 }
573 return *this;
574 }
static logger_config low_latency()
Create a low-latency configuration.
static logger_config production()
Create a production configuration.
static logger_config high_performance()
Create a high-performance configuration.
static logger_config debug_config()
Create a debug configuration.

References config_, kcenon::logger::logger_config::debug_config(), kcenon::logger::logger_config::default_config(), kcenon::logger::logger_config::high_performance(), kcenon::logger::logger_config::low_latency(), and kcenon::logger::logger_config::production().

Referenced by detect_environment().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ validate()

common::VoidResult kcenon::logger::logger_builder::validate ( ) const
inline

Validate current configuration without building.

Returns
Validation result
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 1072 of file logger_builder.h.

1072 {
1073 return config_.validate();
1074 }

References config_, and kcenon::logger::logger_config::validate().

Here is the call graph for this function:

◆ with_async()

◆ with_backend()

logger_builder & kcenon::logger::logger_builder::with_backend ( std::unique_ptr< backends::integration_backend > backend)
inline

Set integration backend explicitly.

Parameters
backendCustom integration backend
Returns
Reference to builder for chaining

Allows setting a custom integration backend instead of using the auto-detected one. Useful for testing or custom integration scenarios.

Since
1.2.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 719 of file logger_builder.h.

719 {
720 backend_ = std::move(backend);
721 return *this;
722 }

References backend_.

◆ with_batch_size()

logger_builder & kcenon::logger::logger_builder::with_batch_size ( std::size_t size)
inline

Set batch size for processing.

Parameters
sizeBatch size
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 226 of file logger_builder.h.

226 {
228 return *this;
229 }
@ size
Rotate based on file size only.

References kcenon::logger::logger_config::batch_size, config_, and kcenon::logger::size.

◆ with_batch_writing()

logger_builder & kcenon::logger::logger_builder::with_batch_writing ( bool enable = true)
inline

Enable batch writing for writers.

Parameters
enableEnable/disable batch writing
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 236 of file logger_builder.h.

236 {
238 return *this;
239 }

References config_, and kcenon::logger::logger_config::enable_batch_writing.

◆ with_buffer_size()

logger_builder & kcenon::logger::logger_builder::with_buffer_size ( std::size_t size)
inline

Set buffer size.

Parameters
sizeBuffer size in bytes
Returns
Reference to builder for chaining

Configures the internal buffer size for log message queuing. Larger buffers can improve throughput but increase memory usage.

Note
Recommended sizes:
  • Small applications: 4096-8192 bytes
  • Medium applications: 16384-32768 bytes
  • High-throughput applications: 65536+ bytes
Warning
Very large buffers may cause memory pressure in constrained environments.
Since
1.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h, and critical_logging_example.cpp.

Definition at line 192 of file logger_builder.h.

192 {
194 return *this;
195 }

References kcenon::logger::logger_config::buffer_size, config_, and kcenon::logger::size.

Referenced by example_production_setup().

Here is the caller graph for this function:

◆ with_config()

logger_builder & kcenon::logger::logger_builder::with_config ( const logger_config & config)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 139 of file logger_builder.h.

139 {
140 config_ = config;
141 return *this;
142 }

References config_.

◆ with_crash_handler()

logger_builder & kcenon::logger::logger_builder::with_crash_handler ( bool enable = true)
inline

Enable crash handler.

Parameters
enableEnable/disable crash handler
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 276 of file logger_builder.h.

276 {
278 return *this;
279 }
bool enable_crash_handler
Enable crash signal handler.

References config_, and kcenon::logger::logger_config::enable_crash_handler.

◆ with_default_pattern()

logger_builder & kcenon::logger::logger_builder::with_default_pattern ( )
inline

Use default pattern for logging.

Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 844 of file logger_builder.h.

844 {
845 // Set a default format pattern
848 return *this;
849 }
bool enable_timestamp
Include timestamp in log entries.
bool enable_source_location
Include source file/line in log entries.

References config_, kcenon::logger::logger_config::enable_source_location, and kcenon::logger::logger_config::enable_timestamp.

◆ with_error_handler()

logger_builder & kcenon::logger::logger_builder::with_error_handler ( std::function< void(const logger_error_code &)> handler)
inline

Set error handler.

Parameters
handlerError handler function
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 743 of file logger_builder.h.

743 {
744 error_handler_ = handler;
745 return *this;
746 }
std::function< void(const logger_error_code &)> error_handler_

References error_handler_.

◆ with_exclusive_routing()

logger_builder & kcenon::logger::logger_builder::with_exclusive_routing ( bool exclusive = true)
inline

Set exclusive routing mode.

Parameters
exclusiveIf true, only matched routes receive logs; otherwise all writers receive
Returns
Reference to builder for chaining

In exclusive mode, only writers matched by routing rules receive log messages. In non-exclusive mode (default), all writers receive messages regardless of routing.

Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 461 of file logger_builder.h.

461 {
462 exclusive_routing_ = exclusive;
463 return *this;
464 }

References exclusive_routing_.

◆ with_file_output()

logger_builder & kcenon::logger::logger_builder::with_file_output ( const std::string & directory,
const std::string & prefix = "app",
std::size_t max_size = 100 * 1024 * 1024,
std::size_t max_count = 5 )
inline

Configure file output.

Parameters
directoryLog directory
prefixFile prefix
max_sizeMaximum file size
max_countMaximum file count for rotation
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 319 of file logger_builder.h.

322 {
323 config_.log_directory = directory;
324 config_.log_file_prefix = prefix;
325 config_.max_file_size = max_size;
326 config_.max_file_count = max_count;
327 return *this;
328 }
std::size_t max_file_size
Maximum file size in bytes (default: 100MB).
std::string log_directory
Directory for log file output.
std::size_t max_file_count
Maximum number of rotating log files.
std::string log_file_prefix
Prefix for log file names.

References config_, kcenon::logger::logger_config::log_directory, kcenon::logger::logger_config::log_file_prefix, kcenon::logger::logger_config::max_file_count, and kcenon::logger::logger_config::max_file_size.

◆ with_flush_interval()

logger_builder & kcenon::logger::logger_builder::with_flush_interval ( std::chrono::milliseconds interval)
inline

Set flush interval.

Parameters
intervalFlush interval
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 246 of file logger_builder.h.

246 {
247 config_.flush_interval = interval;
248 return *this;
249 }

References config_, and kcenon::logger::logger_config::flush_interval.

◆ with_formatter()

logger_builder & kcenon::logger::logger_builder::with_formatter ( std::unique_ptr< log_formatter_interface > formatter)
inline

Set formatter for the logger.

Parameters
formatterFormatter instance
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 529 of file logger_builder.h.

529 {
530 formatter_ = std::move(formatter);
531 return *this;
532 }
std::unique_ptr< log_formatter_interface > formatter_

References formatter_.

◆ with_health_check_interval()

logger_builder & kcenon::logger::logger_builder::with_health_check_interval ( std::chrono::milliseconds interval)
inline

Set health check interval.

Parameters
intervalHealth check interval
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 703 of file logger_builder.h.

703 {
704 health_check_interval_ = interval;
705 return *this;
706 }
std::chrono::milliseconds health_check_interval_

References health_check_interval_.

◆ with_lock_free()

logger_builder & kcenon::logger::logger_builder::with_lock_free ( bool enable = true)
inline

Enable lock-free queue.

Parameters
enableEnable/disable lock-free mode
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 256 of file logger_builder.h.

256 {
257 config_.use_lock_free = enable;
258 return *this;
259 }
bool use_lock_free
Use lock-free queue implementation.

References config_, and kcenon::logger::logger_config::use_lock_free.

◆ with_max_queue_size()

logger_builder & kcenon::logger::logger_builder::with_max_queue_size ( std::size_t size)
inline

Set max queue size.

Parameters
sizeMaximum queue size
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 306 of file logger_builder.h.

306 {
308 return *this;
309 }
std::size_t max_queue_size
Maximum number of queued messages.

References config_, kcenon::logger::logger_config::max_queue_size, and kcenon::logger::size.

◆ with_metrics()

logger_builder & kcenon::logger::logger_builder::with_metrics ( bool enable = true)
inline

Enable metrics collection.

Parameters
enableEnable/disable metrics
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 266 of file logger_builder.h.

266 {
267 config_.enable_metrics = enable;
268 return *this;
269 }

References config_, and kcenon::logger::logger_config::enable_metrics.

◆ with_min_level()

logger_builder & kcenon::logger::logger_builder::with_min_level ( log_level level)
inline

◆ with_monitoring()

logger_builder & kcenon::logger::logger_builder::with_monitoring ( std::shared_ptr< common::interfaces::IMonitor > monitor)
inline

Set monitoring interface (Phase 2.2.4)

Parameters
monitorIMonitor implementation from common_system
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h, di_pattern_example.cpp, and monitoring_integration_example.cpp.

Definition at line 692 of file logger_builder.h.

692 {
693 monitor_ = monitor;
694 config_.enable_metrics = true;
695 return *this;
696 }
std::shared_ptr< common::interfaces::IMonitor > monitor_

References config_, kcenon::logger::logger_config::enable_metrics, and monitor_.

Referenced by example_1_basic_di_pattern(), example_1_basic_integration(), example_2_multiple_loggers(), example_3_imonitorable_interface(), example_4_monitoring_system_simulation(), and example_5_interface_based_usage().

Here is the caller graph for this function:

◆ with_network_output()

logger_builder & kcenon::logger::logger_builder::with_network_output ( const std::string & host,
uint16_t port,
std::chrono::milliseconds timeout = std::chrono::milliseconds(5000) )
inline

Configure network output.

Parameters
hostRemote host
portRemote port
timeoutConnection timeout
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 337 of file logger_builder.h.

339 {
340 config_.remote_host = host;
341 config_.remote_port = port;
342 config_.network_timeout = timeout;
343 return *this;
344 }
std::chrono::milliseconds network_timeout
Network operation timeout.
std::string remote_host
Remote log collector hostname.
uint16_t remote_port
Remote log collector port.

References config_, kcenon::logger::logger_config::network_timeout, kcenon::logger::logger_config::remote_host, and kcenon::logger::logger_config::remote_port.

◆ with_overflow_policy()

logger_builder & kcenon::logger::logger_builder::with_overflow_policy ( logger_config::overflow_policy policy)
inline

Set queue overflow policy.

Parameters
policyOverflow policy to use
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 296 of file logger_builder.h.

296 {
298 return *this;
299 }
overflow_policy queue_overflow_policy
Active overflow policy.

References config_, and kcenon::logger::logger_config::queue_overflow_policy.

◆ with_performance_tuning()

logger_builder & kcenon::logger::logger_builder::with_performance_tuning ( performance_level level)
inline

Apply performance tuning.

Parameters
levelPerformance tuning level
Returns
Reference to builder for chaining

Applies performance-optimized settings:

  • low_latency: Small buffers, immediate flush
  • balanced: Default balanced settings
  • high_throughput: Large buffers, batch processing
  • minimal_overhead: Reduced features, lower CPU usage
Since
2.0.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 623 of file logger_builder.h.

623 {
624 return apply_strategy(std::make_unique<performance_strategy>(level));
625 }

References apply_strategy().

Here is the call graph for this function:

◆ with_route()

logger_builder & kcenon::logger::logger_builder::with_route ( routing::route_config config)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 446 of file logger_builder.h.

446 {
447 routes_.push_back(std::move(config));
448 return *this;
449 }

References routes_.

◆ with_sampler()

logger_builder & kcenon::logger::logger_builder::with_sampler ( std::unique_ptr< sampling::log_sampler > sampler)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 875 of file logger_builder.h.

875 {
876 sampler_ = std::move(sampler);
877 return *this;
878 }

References sampler_.

◆ with_sampling()

logger_builder & kcenon::logger::logger_builder::with_sampling ( const sampling::sampling_config & config)
inline
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 898 of file logger_builder.h.

898 {
899 sampler_ = std::make_unique<sampling::log_sampler>(config);
900 return *this;
901 }

References sampler_.

◆ with_standalone_backend()

logger_builder & kcenon::logger::logger_builder::with_standalone_backend ( )
inline

Use standalone backend explicitly.

Returns
Reference to builder for chaining

Explicitly selects the standalone integration backend. This is the default backend when no external integration is required.

Since
1.2.0
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 733 of file logger_builder.h.

733 {
734 backend_ = std::make_unique<backends::standalone_backend>();
735 return *this;
736 }

References backend_.

◆ with_structured_logging()

logger_builder & kcenon::logger::logger_builder::with_structured_logging ( bool enable = true)
inline

Enable structured logging.

Parameters
enableEnable/disable structured logging
Returns
Reference to builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/logger_builder.h.

Definition at line 286 of file logger_builder.h.

286 {
288 return *this;
289 }
bool enable_structured_logging
Enable structured (JSON) log output.

References config_, and kcenon::logger::logger_config::enable_structured_logging.

Member Data Documentation

◆ backend_

std::unique_ptr<backends::integration_backend> kcenon::logger::logger_builder::backend_
private

◆ built_config_

logger_config kcenon::logger::logger_builder::built_config_
mutableprivate

◆ config_

◆ error_handler_

std::function<void(const logger_error_code&)> kcenon::logger::logger_builder::error_handler_
private

◆ exclusive_routing_

bool kcenon::logger::logger_builder::exclusive_routing_ = false
private

◆ filters_

std::vector<std::unique_ptr<log_filter_interface> > kcenon::logger::logger_builder::filters_
private

◆ formatter_

std::unique_ptr<log_formatter_interface> kcenon::logger::logger_builder::formatter_
private

◆ health_check_interval_

std::chrono::milliseconds kcenon::logger::logger_builder::health_check_interval_ {1000}
private

◆ monitor_

std::shared_ptr<common::interfaces::IMonitor> kcenon::logger::logger_builder::monitor_
private

◆ routes_

std::vector<routing::route_config> kcenon::logger::logger_builder::routes_
private

◆ sampler_

std::unique_ptr<sampling::log_sampler> kcenon::logger::logger_builder::sampler_
private

◆ strategies_

std::vector<std::unique_ptr<config_strategy_interface> > kcenon::logger::logger_builder::strategies_
private

◆ writers_

std::vector<std::pair<std::string, log_writer_ptr> > kcenon::logger::logger_builder::writers_
private

The documentation for this class was generated from the following file: