Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
logger.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
59#include <memory>
60#include <vector>
61#include <atomic>
62#include <thread>
63#include <string_view>
64
66
67// Use common_system's ILogger interface for standardized logging
68#include <kcenon/common/interfaces/logger_interface.h>
69
70#include "error_codes.h"
81#include "unified_log_context.h"
82
83namespace kcenon::logger {
84
85// Type aliases - use common::interfaces types for standardization
86using log_level = common::interfaces::log_level;
89
90// Type aliases for convenience and compatibility
93
98enum class metric_type {
99 gauge,
100 counter,
101 histogram
102};
103
104// Forward declarations
105class log_collector;
106class base_writer;
107class logger_metrics_collector;
108class log_filter_interface; // Forward declaration for filtering system
109
110#ifdef LOGGER_WITH_ANALYSIS
111namespace analysis {
112class realtime_log_analyzer;
113} // namespace analysis
114#endif // LOGGER_WITH_ANALYSIS
115
116namespace sampling {
117class log_sampler;
118} // namespace sampling
119
120} // namespace kcenon::logger
121
122// Include routing header for log_router
124
125namespace kcenon::logger {
126
127// Routing type alias
128using routing::log_router;
129using routing::route_config;
130using routing::router_builder;
131
157 public common::interfaces::ILogger {
158public:
177 explicit logger(bool async = true, std::size_t buffer_size = 8192,
178 std::unique_ptr<backends::integration_backend> backend = nullptr);
179
191 ~logger();
192
193 // =========================================================================
194 // ILogger interface implementation (common::interfaces::ILogger)
195 // =========================================================================
196
206 common::VoidResult log(common::interfaces::log_level level,
207 const std::string& message) override;
208
219 common::VoidResult log(common::interfaces::log_level level,
220 std::string_view message,
221 const common::source_location& loc = common::source_location::current()) override;
222
223 // Legacy log(level, message, file, line, function) removed.
224 // Use log(level, message, source_location::current()) instead.
225
234 common::VoidResult log(const common::interfaces::log_entry& entry) override;
235
244 bool is_enabled(common::interfaces::log_level level) const override;
245
254 common::VoidResult set_level(common::interfaces::log_level level) override;
255
263 common::interfaces::log_level get_level() const override;
264
272 common::VoidResult flush() override;
273
274 // Additional logger-specific methods
275
297 common::VoidResult add_writer(log_writer_ptr writer);
298
311 common::VoidResult clear_writers();
312
337 common::VoidResult start();
338
352 common::VoidResult stop();
353
363 bool is_running() const;
364
370 common::VoidResult enable_metrics_collection(bool enable = true);
371
376 bool is_metrics_collection_enabled() const;
377
382 result<metrics::logger_performance_stats> get_current_metrics() const;
383
390
396
401 logger_metrics_collector* get_metrics_collector();
402
414 common::VoidResult add_writer(const std::string& name, log_writer_ptr writer);
415
421 bool remove_writer(const std::string& name);
422
428 log_writer_interface* get_writer(const std::string& name);
429
449 void set_filter(std::unique_ptr<log_filter_interface> filter);
450
457 bool has_filter() const;
458
459 // =========================================================================
460 // Routing system
461 // =========================================================================
462
486 log_router& get_router();
487
494 const log_router& get_router() const;
495
505 void set_router(std::unique_ptr<log_router> router);
506
513 bool has_routing() const;
514
515 // =========================================================================
516 // Real-time analysis (optional, requires LOGGER_WITH_ANALYSIS)
517 // =========================================================================
518
519#ifdef LOGGER_WITH_ANALYSIS
542 void set_realtime_analyzer(std::unique_ptr<analysis::realtime_log_analyzer> analyzer);
543
552 [[nodiscard]] analysis::realtime_log_analyzer* get_realtime_analyzer();
553
562 [[nodiscard]] const analysis::realtime_log_analyzer* get_realtime_analyzer() const;
563
572 [[nodiscard]] bool has_realtime_analysis() const;
573#endif // LOGGER_WITH_ANALYSIS
574
575 // OpenTelemetry context: Use context().set_otel(), context().get_string("trace_id"),
576 // context().clear(context_category::otel), context().has("trace_id") instead.
577
578 // =========================================================================
579 // Structured logging API
580 // =========================================================================
581
613 [[nodiscard]] structured_log_builder log_structured(log_level level);
614
615 // =========================================================================
616 // Unified Context API (NEW)
617 // =========================================================================
618
646 [[nodiscard]] unified_log_context& context();
647
654 [[nodiscard]] const unified_log_context& context() const;
655
656 // Legacy context fields: Use context().set(key, value) and context().remove(key) instead.
657
658 // =========================================================================
659 // Log sampling API
660 // =========================================================================
661
680 void set_sampler(std::unique_ptr<sampling::log_sampler> sampler);
681
688 [[nodiscard]] sampling::log_sampler* get_sampler();
689
696 [[nodiscard]] const sampling::log_sampler* get_sampler() const;
697
704 [[nodiscard]] bool has_sampling() const;
705
712 [[nodiscard]] sampling::sampling_stats get_sampling_stats() const;
713
719 void reset_sampling_stats();
720
721 // Emergency Flush Support (critical_logger_interface implementation)
722
732 int get_emergency_fd() const override;
733
743 const char* get_emergency_buffer() const override;
744
753 size_t get_emergency_buffer_size() const override;
754
755private:
756 class impl;
757 std::unique_ptr<impl> pimpl_;
758};
759
760} // namespace kcenon::logger
Real-time log analyzer with anomaly detection.
Base interface for all log writers and decorators.
logger_metrics_collector * get_metrics_collector()
Get metrics collector for direct access.
common::VoidResult reset_metrics()
Reset performance metrics.
std::unique_ptr< impl > pimpl_
Definition logger.h:757
result< std::unique_ptr< metrics::logger_performance_stats > > get_metrics_history(std::chrono::seconds duration) const
Get metrics history for a specific duration.
Log router for directing messages to specific writers.
Definition log_router.h:49
Thread-safe log sampler with multiple strategy support.
Definition log_sampler.h:71
Interface for loggers that support emergency flushing.
Fluent builder for creating structured log entries.
Unified interface for managing all types of logging context.
Error codes specific to the logger system.
Runtime polymorphism interface for integration backends kcenon.
Data structures for representing log entries and source locations kcenon.
Log routing functionality.
Base interface for all log writers and decorators.
DLL export/import macros for logger_system shared library support.
#define LOGGER_SYSTEM_API
Logger performance metrics and monitoring.
Common types and enumerations for logger system.
common::interfaces::log_level log_level
health_status
Health status levels.
metric_type
Types of metrics that can be recorded by the logger.
Definition logger.h:98
@ gauge
A metric that can go up or down (e.g., queue depth).
@ counter
A monotonically increasing metric (e.g., total messages).
@ histogram
A distribution of values (e.g., processing latency).
std::unique_ptr< log_writer_interface > log_writer_ptr
Type alias for writer unique pointer.
overflow_policy
Overflow policy for when buffers are full.
health_status
Health status enumeration.
OpenTelemetry context structure for trace correlation kcenon.
Configuration structures and enums for log sampling kcenon.
Signal-safe write wrapper for cross-platform signal handling.
Performance statistics for logger operations.
Statistics about sampling behavior.
Fluent builder for structured log entries kcenon.
Conditionally enables thread_system integration when available.
Unified interface for managing all types of logging context.