65 std::unique_ptr<Logger> wrapped;
122 virtual std::unique_ptr<Logger>
addTo(std::unique_ptr<Logger> && logger)
const = 0;
159 std::unique_ptr<Logger> logger;
191 std::unique_ptr<Logger>
build();
207 return std::move(builder);
331 template <
class CustomLogger,
typename ... args>
333 static_assert(std::is_base_of<Logger, CustomLogger>::value,
334 "CustomLogger must derive from Logger");
335 auto logger = std::make_unique<CustomLogger>(params...);
373 namespace LoggerTraits {
417 namespace _LogBufferPrivate {
418 struct CriticalSection;
450 std::shared_ptr<_LogBufferPrivate::CriticalSection> criticalSection;
451 friend _LogBufferPrivate::Friend;
465 std::vector<std::string>
snapshot()
const;
468 namespace _LogBufferPrivate{
474 struct CriticalSection {
476 std::vector<std::string> buffer;
486 std::shared_ptr<CriticalSection> criticalSection;
493 Friend(LogBuffer & buffer) {
494 this->criticalSection = buffer.criticalSection;
Thread-safe buffer for storing log messages.
Definition: Logger.h:449
std::vector< std::string > snapshot() const
Get a snapshot of all messages currently in the buffer.
Definition: Logger.cpp:236
void push_back(const std::string &msg)
Add a message to the buffer.
Definition: Logger.cpp:231
Builder class for constructing and composing loggers with traits.
Definition: Logger.h:158
friend LoggerBuilder operator|(LoggerBuilder builder, const LoggerTrait &trait)
Operator overload for applying traits using pipe operator.
Definition: Logger.h:205
LoggerBuilder & addTrait(const LoggerTrait &trait)
Add a trait to customize the logger behavior.
Definition: Logger.cpp:221
std::unique_ptr< Logger > build()
Build and return the final logger instance.
Definition: Logger.cpp:227
Abstract base class for logger traits that customize logger behavior.
Definition: Logger.h:106
virtual std::unique_ptr< Logger > addTo(std::unique_ptr< Logger > &&logger) const =0
Apply this trait to a logger by wrapping it.
virtual ~LoggerTrait()=default
Virtual destructor for proper cleanup of derived classes.
Base class for loggers that wrap and delegate to another logger.
Definition: Logger.h:64
void delegate(MessageDirection dir, const std::string &msg)
Delegate a log message to the wrapped logger.
Definition: Logger.cpp:210
Base interface for logging UCI protocol messages.
Definition: Logger.h:32
virtual ~Logger()=default
Virtual destructor for proper cleanup of derived classes.
MessageDirection
Enumeration of message directions for logging purposes.
Definition: Logger.h:37
@ ToEngine
Message sent from the application to the chess engine.
Definition: Logger.h:38
@ FromParser
Message generated or parsed by the UCI parser.
Definition: Logger.h:40
@ FromEngine
Message received from the chess engine.
Definition: Logger.h:39
virtual void log(MessageDirection dir, const std::string &msg)=0
Log a message with a specified direction.
const LoggerTrait & Timestamp
Trait that prepends timestamps to all logged messages.
Definition: Logger.cpp:169
const LoggerTrait & IgnoreApplication
Trait that filters out messages sent to the engine.
Definition: Logger.cpp:168
const LoggerTrait & IgnoreParser
Trait that filters out messages generated by the parser.
Definition: Logger.cpp:166
const LoggerTrait & Pretty
Trait that formats log messages for human readability.
Definition: Logger.cpp:165
const LoggerTrait & IgnoreEngine
Trait that filters out messages received from the engine.
Definition: Logger.cpp:167
LoggerBuilder from(args... params)
Create a custom logger of the specified type.
Definition: Logger.h:332
LoggerBuilder toBuffer(LogBuffer &buffer)
Create a logger that stores messages in abuffer.
Definition: Logger.cpp:195
LoggerBuilder toOstream(std::ostream &os)
Create a logger that outputs to an arbitrary output stream.
Definition: Logger.cpp:205
LoggerBuilder toFile(const std::string &filename)
Create a logger that outputs to a file.
Definition: Logger.cpp:185
LoggerBuilder toStderr()
Create a logger that outputs to standard error.
Definition: Logger.cpp:181
LoggerBuilder toCallback(std::function< void(Logger::MessageDirection, const std::string &msg)> callback)
Create a logger that forwards all messages to a callback function.
Definition: Logger.cpp:200
LoggerBuilder toStd()
Create a logger that outputs to standard output.
Definition: Logger.cpp:176
LoggerBuilder toNoting()
Create a logger that discards all messages.
Definition: Logger.cpp:171