Asynchronous background logging service executing on a dedicated C++20 std::jthread. Consumes/flushes log events or periodic status messages asynchronously without blocking the main event loop.
More...
|
| template<typename... Args> |
| void | info (const char *fmt, Args &&... args) const |
| | Log background heartbeat or event message.
|
| |
| void | join () noexcept |
| | Join background std::jthread cleanly.
|
| |
| | LogBackgroundService (const char *category="LogService", LogLevel minLevel=LogLevel::Info, LogSink sink=LogSink{}) |
| |
| const LoggerType & | logger () const noexcept |
| |
| LoggerType & | logger () noexcept |
| | Access embedded logger instance.
|
| |
| EventSinkT< EventVariant > | mainSink () const noexcept |
| | Get an EventSink handle targeting the main application event queue.
|
| |
| template<typename Handler > |
| bool | on (Handler &&handler) |
| | Register an event handler for incoming events with automatic event type deduction.
|
| |
| bool | processOne () |
| | Process a single incoming event from the service queue.
|
| |
| std::size_t | pump () |
| | Pump all pending incoming events from the queue until empty.
|
| |
| std::size_t | pump (std::size_t maxEvents) |
| | Pump up to maxEvents pending incoming events from the queue.
|
| |
| template<typename EventType , typename Handler > |
| bool | registerHandler (Handler &&handler) |
| | Register an event handler for incoming events with explicit event type parameter.
|
| |
| void | run (const std::stop_token &stopToken) |
| | Main background execution loop.
|
| |
| void | setContext (ServiceContextT< EventVariant > context) noexcept |
| |
| EventSinkT< EventVariant > | sink () noexcept |
| | Get an EventSink handle targeting this service's incoming event queue.
|
| |
| template<typename Derived > |
| void | startThread (Derived *derived) |
| | Start execution loop on dedicated std::jthread.
|
| |
| void | stop () noexcept |
| | Request cancellation on worker std::jthread.
|
| |
| template<typename Rep , typename Period > |
| std::size_t | waitAndPump (const std::stop_token &stopToken, const std::chrono::duration< Rep, Period > &timeout) |
| | Wait for incoming events or timeout, then pump all available incoming events. Safe for use inside worker thread run(std::stop_token).
|
| |
template<typename LogSink = sinks::ConsoleLogSink, typename
EventVariant = DefaultEvents, std::size_t MaxMessageSize = 256>
class corium::logging::LogBackgroundService< LogSink, EventVariant, MaxMessageSize >
Asynchronous background logging service executing on a dedicated C++20 std::jthread. Consumes/flushes log events or periodic status messages asynchronously without blocking the main event loop.
- Template Parameters
-
| LogSink | Log sink backend type (e.g. ConsoleLogSink, FileLogSink, NullLogSink). |
| EventVariant | Event variant list supported by the runtime context. |
| MaxMessageSize | Inline capacity size for log events. |
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Join background std::jthread cleanly.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Get an EventSink handle targeting the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Handler >
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::on |
( |
Handler && |
handler | ) |
|
|
inlineinherited |
Register an event handler for incoming events with automatic event type deduction.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType >
Post an event into the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType >
| void corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::postHighPriority |
( |
EventType && |
event | ) |
const |
|
inlineprotectedinherited |
Post a high-priority event into the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::processOne |
( |
| ) |
|
|
inlineinherited |
Process a single incoming event from the service queue.
- Returns
- true if an event was popped and dispatched; false if queue was empty.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| std::size_t corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::pump |
( |
| ) |
|
|
inlineinherited |
Pump all pending incoming events from the queue until empty.
- Returns
- Number of events processed.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| std::size_t corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::pump |
( |
std::size_t |
maxEvents | ) |
|
|
inlineinherited |
Pump up to maxEvents pending incoming events from the queue.
- Parameters
-
| maxEvents | Maximum number of events to process. |
- Returns
- Number of events processed.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType , typename Handler >
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::registerHandler |
( |
Handler && |
handler | ) |
|
|
inlineinherited |
Register an event handler for incoming events with explicit event type parameter.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename TargetService , typename EventType >
Post an event directly to another registered service.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Get an EventSink handle targeting this service's incoming event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Derived >
| void corium::BackgroundService< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::startThread |
( |
Derived * |
derived | ) |
|
|
inlineinherited |
Start execution loop on dedicated std::jthread.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Request cancellation on worker std::jthread.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Rep , typename Period >
| std::size_t corium::BackgroundService< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::waitAndPump |
( |
const std::stop_token & |
stopToken, |
|
|
const std::chrono::duration< Rep, Period > & |
timeout |
|
) |
| |
|
inlineinherited |
Wait for incoming events or timeout, then pump all available incoming events. Safe for use inside worker thread run(std::stop_token).
- Template Parameters
-
| Rep | Duration representation type. |
| Period | Duration period type. |
- Parameters
-
| stopToken | std::stop_token from run(stopToken). |
| timeout | Maximum duration to wait if queue is empty. |
- Returns
- Number of events processed.