Logger System 1.0.0
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;
87// health_status and overflow_policy are declared directly in this namespace
88// via <kcenon/logger/interfaces/logger_types.h> (included above). No further
89// aliasing needed — they are already visible as kcenon::logger::health_status
90// and kcenon::logger::overflow_policy.
91
92// Type aliases for convenience and compatibility
95
100enum class metric_type {
101 gauge,
102 counter,
103 histogram
104};
105
106// Forward declarations
107class log_collector;
108class base_writer;
109class logger_metrics_collector;
110class log_filter_interface; // Forward declaration for filtering system
111
112#ifdef LOGGER_WITH_ANALYSIS
113namespace analysis {
114class realtime_log_analyzer;
115} // namespace analysis
116#endif // LOGGER_WITH_ANALYSIS
117
118namespace sampling {
119class log_sampler;
120} // namespace sampling
121
122} // namespace kcenon::logger
123
124// Include routing header for log_router
126
127namespace kcenon::logger {
128
129// Routing type alias
130using routing::log_router;
131using routing::route_config;
132using routing::router_builder;
133
159 public common::interfaces::ILogger {
160public:
179 explicit logger(bool async = true, std::size_t buffer_size = 8192,
180 std::unique_ptr<backends::integration_backend> backend = nullptr);
181
193 ~logger();
194
195 // =========================================================================
196 // ILogger interface implementation (common::interfaces::ILogger)
197 // =========================================================================
198
208 common::VoidResult log(common::interfaces::log_level level,
209 const std::string& message) override;
210
221 common::VoidResult log(common::interfaces::log_level level,
222 std::string_view message,
223 const common::source_location& loc = common::source_location::current()) override;
224
225 // Legacy log(level, message, file, line, function) removed.
226 // Use log(level, message, source_location::current()) instead.
227
236 common::VoidResult log(const common::interfaces::log_entry& entry) override;
237
246 bool is_enabled(common::interfaces::log_level level) const override;
247
256 common::VoidResult set_level(common::interfaces::log_level level) override;
257
265 common::interfaces::log_level get_level() const override;
266
274 common::VoidResult flush() override;
275
276 // Additional logger-specific methods
277
299 common::VoidResult add_writer(log_writer_ptr writer);
300
313 common::VoidResult clear_writers();
314
339 common::VoidResult start();
340
354 common::VoidResult stop();
355
365 bool is_running() const;
366
372 common::VoidResult enable_metrics_collection(bool enable = true);
373
378 bool is_metrics_collection_enabled() const;
379
384 result<metrics::logger_performance_stats> get_current_metrics() const;
385
392
398
403 logger_metrics_collector* get_metrics_collector();
404
416 common::VoidResult add_writer(const std::string& name, log_writer_ptr writer);
417
423 bool remove_writer(const std::string& name);
424
430 log_writer_interface* get_writer(const std::string& name);
431
451 void set_filter(std::unique_ptr<log_filter_interface> filter);
452
459 bool has_filter() const;
460
461 // =========================================================================
462 // Routing system
463 // =========================================================================
464
488 log_router& get_router();
489
496 const log_router& get_router() const;
497
507 void set_router(std::unique_ptr<log_router> router);
508
515 bool has_routing() const;
516
517 // =========================================================================
518 // Real-time analysis (optional, requires LOGGER_WITH_ANALYSIS)
519 // =========================================================================
520
521#ifdef LOGGER_WITH_ANALYSIS
544 void set_realtime_analyzer(std::unique_ptr<analysis::realtime_log_analyzer> analyzer);
545
554 [[nodiscard]] analysis::realtime_log_analyzer* get_realtime_analyzer();
555
564 [[nodiscard]] const analysis::realtime_log_analyzer* get_realtime_analyzer() const;
565
574 [[nodiscard]] bool has_realtime_analysis() const;
575#endif // LOGGER_WITH_ANALYSIS
576
577 // OpenTelemetry context: Use context().set_otel(), context().get_string("otel_trace_id"),
578 // context().clear(context_category::otel), context().has("otel_trace_id") instead.
579
580 // =========================================================================
581 // Structured logging API
582 // =========================================================================
583
615 [[nodiscard]] structured_log_builder log_structured(log_level level);
616
617 // =========================================================================
618 // Unified Context API (NEW)
619 // =========================================================================
620
648 [[nodiscard]] unified_log_context& context();
649
656 [[nodiscard]] const unified_log_context& context() const;
657
658 // Legacy context fields: Use context().set(key, value) and context().remove(key) instead.
659
660 // =========================================================================
661 // Log sampling API
662 // =========================================================================
663
682 void set_sampler(std::unique_ptr<sampling::log_sampler> sampler);
683
690 [[nodiscard]] sampling::log_sampler* get_sampler();
691
698 [[nodiscard]] const sampling::log_sampler* get_sampler() const;
699
706 [[nodiscard]] bool has_sampling() const;
707
714 [[nodiscard]] sampling::sampling_stats get_sampling_stats() const;
715
721 void reset_sampling_stats();
722
723 // Emergency Flush Support (critical_logger_interface implementation)
724
734 int get_emergency_fd() const override;
735
745 const char* get_emergency_buffer() const override;
746
755 size_t get_emergency_buffer_size() const override;
756
757private:
758 class impl;
759 std::unique_ptr<impl> pimpl_;
760};
761
762} // 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:759
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
metric_type
Types of metrics that can be recorded by the logger.
Definition logger.h:100
@ 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.
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.