Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::structured_log_builder Class Reference

Fluent builder for creating structured log entries. More...

#include <structured_log_builder.h>

Collaboration diagram for kcenon::logger::structured_log_builder:
Collaboration graph

Public Types

using emit_callback = std::function<void(log_entry&&)>
 Callback type for emitting structured log entries.
 

Public Member Functions

 structured_log_builder (log_level level, emit_callback callback, const log_fields *context_fields=nullptr)
 Constructor.
 
structured_log_buildermessage (const std::string &msg)
 Set the log message.
 
structured_log_builderfield (const std::string &key, const std::string &value)
 Add a string field.
 
structured_log_builderfield (const std::string &key, const char *value)
 Add a C-string field.
 
structured_log_builderfield (const std::string &key, int value)
 Add an integer field.
 
structured_log_builderfield (const std::string &key, int64_t value)
 Add a long integer field.
 
structured_log_builderfield (const std::string &key, double value)
 Add a double field.
 
structured_log_builderfield (const std::string &key, bool value)
 Add a boolean field.
 
structured_log_builderfield (const std::string &key, const log_value &value)
 Add a log_value field.
 
structured_log_buildercategory (const std::string &cat)
 Set the category for the log entry.
 
void emit ()
 Emit the log entry.
 
 ~structured_log_builder ()=default
 Destructor - does NOT auto-emit.
 
 structured_log_builder (const structured_log_builder &)=delete
 
structured_log_builderoperator= (const structured_log_builder &)=delete
 
 structured_log_builder (structured_log_builder &&) noexcept=default
 
structured_log_builderoperator= (structured_log_builder &&) noexcept=default
 

Private Attributes

log_level level_
 
emit_callback callback_
 
std::string message_
 
std::string category_
 
log_fields fields_
 

Detailed Description

Fluent builder for creating structured log entries.

Provides a builder pattern for constructing log entries with arbitrary structured fields. The builder collects message and field information, then emits the log entry when emit() is called.

Thread-safety: Each builder instance should be used by a single thread. The emit() operation is thread-safe.

Note
The builder holds a reference to the logger. Do not use the builder after the logger has been destroyed.
Since
3.1.0

Definition at line 57 of file structured_log_builder.h.

Member Typedef Documentation

◆ emit_callback

Callback type for emitting structured log entries.

Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 62 of file structured_log_builder.h.

Constructor & Destructor Documentation

◆ structured_log_builder() [1/3]

kcenon::logger::structured_log_builder::structured_log_builder ( log_level level,
emit_callback callback,
const log_fields * context_fields = nullptr )
inline

Constructor.

Parameters
levelLog level for the entry
callbackCallback to invoke when emit() is called
context_fieldsContext fields to include automatically
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 70 of file structured_log_builder.h.

73 : level_(level),
74 callback_(std::move(callback)) {
75 if (context_fields && !context_fields->empty()) {
76 fields_ = *context_fields;
77 }
78 }

◆ ~structured_log_builder()

kcenon::logger::structured_log_builder::~structured_log_builder ( )
default

Destructor - does NOT auto-emit.

If emit() was not called, the log entry is discarded. This is intentional to avoid unexpected behavior.

Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

◆ structured_log_builder() [2/3]

kcenon::logger::structured_log_builder::structured_log_builder ( const structured_log_builder & )
delete

◆ structured_log_builder() [3/3]

kcenon::logger::structured_log_builder::structured_log_builder ( structured_log_builder && )
defaultnoexcept

Member Function Documentation

◆ category()

structured_log_builder & kcenon::logger::structured_log_builder::category ( const std::string & cat)
inline

Set the category for the log entry.

Parameters
catCategory string
Returns
Reference to this builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 172 of file structured_log_builder.h.

172 {
173 category_ = cat;
174 return *this;
175 }

References category_.

◆ emit()

void kcenon::logger::structured_log_builder::emit ( )
inline

Emit the log entry.

Constructs the log_entry with all accumulated fields and invokes the callback to send it to the logger. After calling emit(), the builder should not be reused.

Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 184 of file structured_log_builder.h.

184 {
185 if (!callback_) {
186 return;
187 }
188
189 log_entry entry(level_, message_);
190
191 if (!fields_.empty()) {
192 entry.fields = std::move(fields_);
193 }
194
195 if (!category_.empty()) {
196 entry.category = small_string_128(category_);
197 }
198
199 callback_(std::move(entry));
200 }
small_string< 128 > small_string_128

References callback_, kcenon::logger::log_entry::category, category_, kcenon::logger::log_entry::fields, fields_, level_, and message_.

◆ field() [1/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
bool value )
inline

Add a boolean field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 151 of file structured_log_builder.h.

151 {
152 fields_[key] = value;
153 return *this;
154 }

References fields_.

◆ field() [2/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
const char * value )
inline

Add a C-string field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 107 of file structured_log_builder.h.

107 {
108 fields_[key] = std::string(value);
109 return *this;
110 }

References fields_.

◆ field() [3/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
const log_value & value )
inline

Add a log_value field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 162 of file structured_log_builder.h.

162 {
163 fields_[key] = value;
164 return *this;
165 }

References fields_.

◆ field() [4/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
const std::string & value )
inline

Add a string field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 96 of file structured_log_builder.h.

96 {
97 fields_[key] = value;
98 return *this;
99 }

References fields_.

◆ field() [5/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
double value )
inline

Add a double field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 140 of file structured_log_builder.h.

140 {
141 fields_[key] = value;
142 return *this;
143 }

References fields_.

◆ field() [6/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
int value )
inline

Add an integer field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 118 of file structured_log_builder.h.

118 {
119 fields_[key] = static_cast<int64_t>(value);
120 return *this;
121 }

References fields_.

◆ field() [7/7]

structured_log_builder & kcenon::logger::structured_log_builder::field ( const std::string & key,
int64_t value )
inline

Add a long integer field.

Parameters
keyField name
valueField value
Returns
Reference to this builder for chaining

Definition at line 129 of file structured_log_builder.h.

129 {
130 fields_[key] = value;
131 return *this;
132 }

References fields_.

◆ message()

structured_log_builder & kcenon::logger::structured_log_builder::message ( const std::string & msg)
inline

Set the log message.

Parameters
msgThe message to log
Returns
Reference to this builder for chaining
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/core/structured_log_builder.h.

Definition at line 85 of file structured_log_builder.h.

85 {
86 message_ = msg;
87 return *this;
88 }

References message_.

◆ operator=() [1/2]

◆ operator=() [2/2]

structured_log_builder & kcenon::logger::structured_log_builder::operator= ( structured_log_builder && )
defaultnoexcept

Member Data Documentation

◆ callback_

emit_callback kcenon::logger::structured_log_builder::callback_
private

◆ category_

std::string kcenon::logger::structured_log_builder::category_
private

◆ fields_

log_fields kcenon::logger::structured_log_builder::fields_
private

◆ level_

log_level kcenon::logger::structured_log_builder::level_
private

◆ message_

std::string kcenon::logger::structured_log_builder::message_
private

The documentation for this class was generated from the following file: