microfmt
Zero-allocation C++ formatting for constrained environments
Loading...
Searching...
No Matches
Classes | Concepts | Functions
microfmt::log::detail Namespace Reference

Fixed-capacity logger that formats records before dispatching to sinks. More...

Classes

struct  has_log_sink_flush
 
struct  has_log_sink_flush< Tag, std::void_t< decltype(log_sink_traits< Tag >::flush(std::declval< value_ref< typename log_sink_traits< Tag >::context_type > >()))> >
 
struct  has_stateless_log_sink_flush
 
struct  has_stateless_log_sink_flush< Tag, std::void_t< decltype(log_sink_traits< Tag >::flush())> >
 
struct  identity_decorator
 Default message decorator: forwards the record unchanged. More...
 
struct  null_mutex
 No-op mutex used as basic_logger's default Mutex so single-threaded usage pays zero synchronization cost. More...
 
class  tagged_log_sink_base
 CRTP-free base providing fixed-capacity tag storage and truncating tag resolution, shared by tag-per-record log sink backends. More...
 

Concepts

concept  has_extended_full
 
concept  has_extended_flush
 

Functions

logger *& configured_default_logger () noexcept
 

Detailed Description

Fixed-capacity logger that formats records before dispatching to sinks.

Template Parameters
MaxSinksMaximum number of attached structured log sinks.
MsgBufferCapacityCapacity of each formatted message payload.
MutexBasicLockable type (lock()/unlock()) serializing calls to log()/flush()/add_sink() across threads. Defaults to a no-op lock, so concurrent callers may interleave ("slice") sink writes; pass e.g. std::mutex to serialize them instead when a single logger instance is shared across threads doing normal (non-signal-handler) logging.
SinkSink handle type stored by the logger (log_sink by default; see extended_logger for advanced sinks).
DecoratorCallable mapping the formatted log_msg to what sinks receive (identity by default; extended_logger adds execution metadata).
Warning
basic_logger is intended for normal program operation only, and must never be reused from a signal/crash handler regardless of Mutex choice: a blocking mutex can deadlock if the signal lands on a thread that already holds it, and several sink backends (buffered stdio, syslog, the systemd journal) aren't async-signal-safe to begin with. Crash handlers must set up their own dedicated, minimal sink chain built directly on an async-signal-safe primitive such as fd_sink (see crash_handler_demo.cpp) instead of routing through an application's basic_logger.

Function Documentation

◆ configured_default_logger()

logger *& microfmt::log::detail::configured_default_logger ( )
inlinenoexcept