84#include <kcenon/common/interfaces/monitoring_interface.h>
320 const std::string& prefix =
"app",
321 std::size_t max_size = 100 * 1024 * 1024,
322 std::size_t max_count = 5) {
339 std::chrono::milliseconds timeout = std::chrono::milliseconds(5000)) {
353 writers_.push_back({name, std::move(writer)});
377 filters_.push_back(std::move(filter));
390 filters_.push_back(std::make_unique<filters::level_filter>(min_level));
403 filters_.push_back(std::make_unique<filters::regex_filter>(pattern, include_matches));
415 filters_.push_back(std::make_unique<filters::function_filter>(std::move(predicate)));
447 routes_.push_back(std::move(config));
485 const std::vector<std::string>& writer_names,
486 bool stop_propagation =
false) {
489 config.
filter = std::make_unique<filters::level_filter>(level);
491 routes_.push_back(std::move(config));
514 const std::vector<std::string>& writer_names,
515 bool stop_propagation =
false) {
518 config.
filter = std::make_unique<filters::regex_filter>(pattern,
true);
520 routes_.push_back(std::move(config));
562 if (name ==
"high_performance") {
564 }
else if (name ==
"low_latency") {
566 }
else if (name ==
"debug") {
568 }
else if (name ==
"production") {
607 return apply_strategy(std::make_unique<deployment_strategy>(env));
624 return apply_strategy(std::make_unique<performance_strategy>(level));
638 auto strategy = std::make_unique<environment_strategy>();
639 if (strategy->is_applicable()) {
662 const char* env = std::getenv(
"LOG_ENV");
663 const char* level = std::getenv(
"LOG_LEVEL");
666 std::string env_str(env);
667 if (env_str ==
"production") {
669 }
else if (env_str ==
"debug" || env_str ==
"development") {
675 std::string level_str(level);
734 backend_ = std::make_unique<backends::standalone_backend>();
752#ifdef LOGGER_WITH_ANALYSIS
777 std::unique_ptr<analysis::realtime_log_analyzer> analyzer) {
778 realtime_analyzer_ = std::move(analyzer);
810 const analysis::realtime_analysis_config& config,
812 realtime_analyzer_ = std::make_unique<analysis::realtime_log_analyzer>(config);
814 realtime_analyzer_->set_anomaly_callback(std::move(callback));
832 size_t error_threshold = 50,
835 error_threshold, std::move(callback));
899 sampler_ = std::make_unique<sampling::log_sampler>(config);
945 [](
const auto& a,
const auto& b) {
946 return a->priority() > b->priority();
951 if (strategy->is_applicable()) {
961 "Configuration validation failed"};
968 "Number of writers exceeds max_writers configuration"};
974 backend_ = std::make_unique<backends::standalone_backend>();
984 logger_instance->enable_metrics_collection(
true);
988 for (
auto& [name, writer] :
writers_) {
991 if (
auto* console =
dynamic_cast<console_writer*
>(writer.get())) {
1001 auto batch_wrapped = std::make_unique<batch_writer>(
1002 std::move(writer), batch_cfg
1004 logger_instance->add_writer(name, std::move(batch_wrapped));
1006 logger_instance->add_writer(name, std::move(writer));
1015 logger_instance->set_filter(std::move(
filters_[0]));
1019 composite->add_filter(std::move(filter));
1021 logger_instance->set_filter(std::move(
composite));
1028 auto& router = logger_instance->get_router();
1031 router.add_route(std::move(route));
1037#ifdef LOGGER_WITH_ANALYSIS
1038 if (realtime_analyzer_) {
1039 logger_instance->set_realtime_analyzer(std::move(realtime_analyzer_));
1045 logger_instance->set_sampler(std::move(
sampler_));
1050 logger_instance->start();
1057 return logger_instance;
1078 std::vector<std::pair<std::string, log_writer_ptr>>
writers_;
1079 std::vector<std::unique_ptr<log_filter_interface>>
filters_;
1083 std::unique_ptr<backends::integration_backend>
backend_;
1086 std::shared_ptr<common::interfaces::IMonitor>
monitor_;
1089#ifdef LOGGER_WITH_ANALYSIS
1090 std::unique_ptr<analysis::realtime_log_analyzer> realtime_analyzer_;
Batch writer that accumulates log entries and writes them in batches.
static std::unique_ptr< realtime_log_analyzer > create_production(size_t error_threshold=50, realtime_log_analyzer::anomaly_callback callback=nullptr)
Create a production-ready analyzer with sensible defaults.
std::function< void(const anomaly_event &)> anomaly_callback
Callback type for anomaly notifications.
Core console writer for logging to stdout/stderr.
Builder pattern for logger construction with validation.
logger_builder & with_monitoring(std::shared_ptr< common::interfaces::IMonitor > monitor)
Set monitoring interface (Phase 2.2.4)
logger_builder & with_config(const logger_config &config)
logger_builder & add_function_filter(std::function< bool(const log_entry &)> predicate)
Add a function-based filter (convenience method)
logger_builder & with_metrics(bool enable=true)
Enable metrics collection.
logger_builder & with_exclusive_routing(bool exclusive=true)
Set exclusive routing mode.
std::unique_ptr< sampling::log_sampler > sampler_
logger_builder & with_min_level(log_level level)
logger_builder & with_sampler(std::unique_ptr< sampling::log_sampler > sampler)
logger_builder & with_structured_logging(bool enable=true)
Enable structured logging.
logger_builder & with_batch_size(std::size_t size)
Set batch size for processing.
std::unique_ptr< log_formatter_interface > formatter_
logger_builder & use_template(const std::string &name)
std::vector< routing::route_config > routes_
logger_builder & with_lock_free(bool enable=true)
Enable lock-free queue.
std::function< void(const logger_error_code &)> error_handler_
common::VoidResult validate() const
Validate current configuration without building.
logger_builder & with_crash_handler(bool enable=true)
Enable crash handler.
logger_builder & with_default_pattern()
Use default pattern for logging.
logger_builder & with_batch_writing(bool enable=true)
Enable batch writing for writers.
logger_builder & auto_configure()
Auto-configure from environment variables.
logger_builder & detect_environment()
Detect environment from environment variables.
logger_builder & with_network_output(const std::string &host, uint16_t port, std::chrono::milliseconds timeout=std::chrono::milliseconds(5000))
Configure network output.
logger_builder & with_max_queue_size(std::size_t size)
Set max queue size.
logger_builder & with_sampling(const sampling::sampling_config &config)
std::shared_ptr< common::interfaces::IMonitor > monitor_
logger_builder & with_standalone_backend()
Use standalone backend explicitly.
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)
Configure file output.
logger_builder & with_overflow_policy(logger_config::overflow_policy policy)
Set queue overflow policy.
logger_builder & with_backend(std::unique_ptr< backends::integration_backend > backend)
Set integration backend explicitly.
logger_builder & add_regex_filter(const std::string &pattern, bool include_matches=true)
Add a regex filter (convenience method)
logger_builder & with_async(bool async=true)
logger_builder & with_health_check_interval(std::chrono::milliseconds interval)
Set health check interval.
logger_config built_config_
std::vector< std::unique_ptr< log_filter_interface > > filters_
logger_builder & with_performance_tuning(performance_level level)
Apply performance tuning.
logger_builder & with_error_handler(std::function< void(const logger_error_code &)> handler)
Set error handler.
logger_builder & for_environment(deployment_env env)
Configure for a specific deployment environment.
std::vector< std::unique_ptr< config_strategy_interface > > strategies_
logger_builder & route_level(log_level level, const std::vector< std::string > &writer_names, bool stop_propagation=false)
logger_builder & add_filter(std::unique_ptr< log_filter_interface > filter)
logger_builder & add_level_filter(log_level min_level)
Add a level filter (convenience method)
std::chrono::milliseconds health_check_interval_
std::vector< std::pair< std::string, log_writer_ptr > > writers_
logger_builder & apply_strategy(std::unique_ptr< config_strategy_interface > strategy)
Apply a configuration strategy.
result< std::unique_ptr< logger > > build()
logger_builder & add_writer(const std::string &name, log_writer_ptr writer)
Add a writer to the logger.
logger_builder & route_pattern(const std::string &pattern, const std::vector< std::string > &writer_names, bool stop_propagation=false)
std::unique_ptr< backends::integration_backend > backend_
logger_builder & with_buffer_size(std::size_t size)
Set buffer size.
logger_builder & clear_strategies()
Clear all registered strategies.
logger_builder & with_flush_interval(std::chrono::milliseconds interval)
Set flush interval.
logger_builder & with_formatter(std::unique_ptr< log_formatter_interface > formatter)
Set formatter for the logger.
const logger_config & get_config() const
Get the current configuration (for inspection)
logger_builder & with_route(routing::route_config config)
Composite configuration strategy for combining multiple strategies.
Interface for logger configuration strategies (Strategy Pattern)
Console writer for logging to stdout/stderr.
Deployment environment configuration strategies.
Environment variable-based configuration strategy.
Log filtering functionality.
Runtime polymorphism interface for integration backends kcenon.
Log routing functionality.
Log sampling implementation for high-volume scenarios kcenon.
Base interface for all log writers and decorators.
High-performance, thread-safe logging system with asynchronous capabilities.
Configuration structure for logger with validation.
logger_error_code
Error codes specific to the logger system.
deployment_env
Deployment environment types.
@ size
Rotate based on file size only.
performance_level
Performance tuning presets.
std::unique_ptr< log_writer_interface > log_writer_ptr
Type alias for writer unique pointer.
Real-time log analysis with anomaly detection.
Standalone integration backend implementation kcenon.
Configuration for batch writer.
std::chrono::milliseconds flush_interval
Represents a single log entry with all associated metadata.
Configuration structure for logger with validation.
log_level min_level
Minimum log level to process.
std::size_t batch_size
Number of messages per batch write.
static logger_config low_latency()
Create a low-latency configuration.
common::VoidResult validate() const
Validate the configuration.
static logger_config production()
Create a production configuration.
bool enable_batch_writing
Enable batch writing mode.
std::size_t max_file_size
Maximum file size in bytes (default: 100MB).
bool async
Enable asynchronous logging.
std::chrono::milliseconds network_timeout
Network operation timeout.
bool enable_color_output
Enable ANSI color output.
bool enable_timestamp
Include timestamp in log entries.
static logger_config default_config()
Create a default configuration.
overflow_policy queue_overflow_policy
Active overflow policy.
bool enable_source_location
Include source file/line in log entries.
bool enable_metrics
Enable performance metrics collection.
static logger_config high_performance()
Create a high-performance configuration.
std::string log_directory
Directory for log file output.
std::string remote_host
Remote log collector hostname.
overflow_policy
Policy for handling queue overflow when max_queue_size is reached.
std::chrono::milliseconds flush_interval
Interval between automatic flushes.
std::size_t buffer_size
Internal buffer size in bytes.
uint16_t remote_port
Remote log collector port.
std::size_t max_writers
Maximum number of concurrent writers.
std::size_t max_file_count
Maximum number of rotating log files.
bool enable_crash_handler
Enable crash signal handler.
bool use_lock_free
Use lock-free queue implementation.
std::size_t max_queue_size
Maximum number of queued messages.
bool enable_structured_logging
Enable structured (JSON) log output.
std::string log_file_prefix
Prefix for log file names.
static logger_config debug_config()
Create a debug configuration.
Route configuration for log messages.
std::vector< std::string > writer_names
std::unique_ptr< log_filter_interface > filter
Configuration for log sampling behavior.
Conditionally enables thread_system integration when available.