Logify/LogifyBuilder.mqh
2025-08-21 11:59:58 -03:00

615 lines
29 KiB
MQL5

//+------------------------------------------------------------------+
//| LogifyBuilder.mqh |
//| joaopedrodev |
//| https://www.mql5.com/en/users/joaopedrodev |
//+------------------------------------------------------------------+
#property copyright "joaopedrodev"
#property link "https://www.mql5.com/en/users/joaopedrodev"
//+------------------------------------------------------------------+
//| Import |
//+------------------------------------------------------------------+
#include "Logify.mqh"
//--- Creates an empty class to compile without errors
class CLogifyBuilder;
//+------------------------------------------------------------------+
//| class : CLogifyHandlerCommentBuilder |
//| |
//| [PROPERTY] |
//| Name : LogifyHandlerCommentBuilder |
//| Heritage : No heritage |
//| Description : Comment handler constructor. |
//| |
//+------------------------------------------------------------------+
class CLogifyHandlerCommentBuilder
{
private:
MqlLogifyHandleCommentConfig m_config;
CLogifyBuilder *m_parent;
CLogifyFormatter *m_formatter;
CLogifyHandlerComment *m_handler;
public:
CLogifyHandlerCommentBuilder(CLogifyBuilder *logify);
~CLogifyHandlerCommentBuilder(void);
CLogifyHandlerCommentBuilder *SetLevel(ENUM_LOG_LEVEL level);
CLogifyHandlerCommentBuilder *SetFormatter(string format);
CLogifyHandlerCommentBuilder *SetFormatter(ENUM_LOG_LEVEL level, string format);
CLogifyBuilder *Done(void);
//---
CLogifyHandlerCommentBuilder *SetSize(int size);
CLogifyHandlerCommentBuilder *SetFrameStyle(ENUM_LOG_FRAME_STYLE frame_style);
CLogifyHandlerCommentBuilder *SetDirection(ENUM_LOG_DIRECTION direction);
CLogifyHandlerCommentBuilder *SetTitle(string title);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder::CLogifyHandlerCommentBuilder(CLogifyBuilder *logify)
{
m_parent = logify;
m_formatter = new CLogifyFormatter();
m_handler = new CLogifyHandlerComment();
m_handler.SetFormatter(GetPointer(m_formatter));
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder::~CLogifyHandlerCommentBuilder(void)
{
}
//+------------------------------------------------------------------+
//| Sets the log level for the handler. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetLevel(ENUM_LOG_LEVEL level)
{
m_handler.SetLevel(level);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the default format string for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetFormatter(string format)
{
m_formatter.SetFormat(format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets a log-level-specific format for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetFormatter(ENUM_LOG_LEVEL level, string format)
{
m_formatter.SetFormat(level,format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Finalizes the handler configuration. |
//+------------------------------------------------------------------+
CLogifyBuilder *CLogifyHandlerCommentBuilder::Done(void)
{
delete GetPointer(this);
m_parent.AddHandler(GetPointer(m_handler));
return(m_parent);
}
//+------------------------------------------------------------------+
//| Sets the size configuration of the comment handler. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetSize(int size)
{
m_config.size = size;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the frame style of the comment box. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetFrameStyle(ENUM_LOG_FRAME_STYLE frame_style)
{
m_config.frame_style = frame_style;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the direction (UP or DOWN). |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetDirection(ENUM_LOG_DIRECTION direction)
{
m_config.direction = direction;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the title of the comment box. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyHandlerCommentBuilder::SetTitle(string title)
{
m_config.title = title;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| class : CLogifyHandlerConsoleBuilder |
//| |
//| [PROPERTY] |
//| Name : LogifyHandlerConsoleBuilder |
//| Heritage : No heritage |
//| Description : Console handler constructor. |
//| |
//+------------------------------------------------------------------+
class CLogifyHandlerConsoleBuilder
{
private:
CLogifyBuilder *m_parent;
CLogifyFormatter *m_formatter;
CLogifyHandlerConsole *m_handler;
public:
CLogifyHandlerConsoleBuilder(CLogifyBuilder *logify);
~CLogifyHandlerConsoleBuilder(void);
CLogifyHandlerConsoleBuilder *SetLevel(ENUM_LOG_LEVEL level);
CLogifyHandlerConsoleBuilder *SetFormatter(string format);
CLogifyHandlerConsoleBuilder *SetFormatter(ENUM_LOG_LEVEL level, string format);
CLogifyBuilder *Done(void);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder::CLogifyHandlerConsoleBuilder(CLogifyBuilder *logify)
{
m_parent = logify;
m_formatter = new CLogifyFormatter();
m_handler = new CLogifyHandlerConsole();
m_handler.SetFormatter(GetPointer(m_formatter));
};
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder::~CLogifyHandlerConsoleBuilder(void)
{
}
//+------------------------------------------------------------------+
//| Sets the log level for the handler. |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder *CLogifyHandlerConsoleBuilder::SetLevel(ENUM_LOG_LEVEL level)
{
m_handler.SetLevel(level);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the default format string for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder *CLogifyHandlerConsoleBuilder::SetFormatter(string format)
{
m_formatter.SetFormat(format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets a log-level-specific format for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder *CLogifyHandlerConsoleBuilder::SetFormatter(ENUM_LOG_LEVEL level, string format)
{
m_formatter.SetFormat(level,format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Finalizes the handler configuration. |
//+------------------------------------------------------------------+
CLogifyBuilder *CLogifyHandlerConsoleBuilder::Done(void)
{
m_parent.AddHandler(GetPointer(m_handler));
delete GetPointer(this);
return(m_parent);
}
//+------------------------------------------------------------------+
//| class : CLogifyHandlerDatabaseBuilder |
//| |
//| [PROPERTY] |
//| Name : LogifyHandlerDatabaseBuilder |
//| Heritage : No heritage |
//| Description : Database handler constructor. |
//| |
//+------------------------------------------------------------------+
class CLogifyHandlerDatabaseBuilder
{
private:
MqlLogifyHandleDatabaseConfig m_config;
CLogifyBuilder *m_parent;
CLogifyFormatter *m_formatter;
CLogifyHandlerDatabase *m_handler;
public:
CLogifyHandlerDatabaseBuilder(CLogifyBuilder *logify);
~CLogifyHandlerDatabaseBuilder(void);
CLogifyHandlerDatabaseBuilder *SetLevel(ENUM_LOG_LEVEL level);
CLogifyHandlerDatabaseBuilder *SetFormatter(string format);
CLogifyHandlerDatabaseBuilder *SetFormatter(ENUM_LOG_LEVEL level, string format);
CLogifyBuilder *Done(void);
//---
CLogifyHandlerDatabaseBuilder *SetDirectory(string directory);
CLogifyHandlerDatabaseBuilder *SetBaseFileName(string base_filename);
CLogifyHandlerDatabaseBuilder *SetMessagesPerFlush(int messages_per_flush);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder::CLogifyHandlerDatabaseBuilder(CLogifyBuilder *logify)
{
m_parent = logify;
m_formatter = new CLogifyFormatter();
m_handler = new CLogifyHandlerDatabase();
m_handler.SetFormatter(GetPointer(m_formatter));
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder::~CLogifyHandlerDatabaseBuilder(void)
{
}
//+------------------------------------------------------------------+
//| Sets the log level for the handler. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetLevel(ENUM_LOG_LEVEL level)
{
m_handler.SetLevel(level);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the default format string for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetFormatter(string format)
{
m_formatter.SetFormat(format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets a log-level-specific format for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetFormatter(ENUM_LOG_LEVEL level, string format)
{
m_formatter.SetFormat(level,format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Finalizes the handler configuration. |
//+------------------------------------------------------------------+
CLogifyBuilder *CLogifyHandlerDatabaseBuilder::Done(void)
{
m_parent.AddHandler(GetPointer(m_handler));
delete GetPointer(this);
return(m_parent);
}
//+------------------------------------------------------------------+
//| Sets the directory where the database files will be stored. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetDirectory(string directory)
{
m_config.directory = directory;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the base file name for the database file. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetBaseFileName(string base_filename)
{
m_config.base_filename = base_filename;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets how many messages should be logged before flushing to disk. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyHandlerDatabaseBuilder::SetMessagesPerFlush(int messages_per_flush)
{
m_config.messages_per_flush = messages_per_flush;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| class : CLogifyHandlerFileBuilder |
//| |
//| [PROPERTY] |
//| Name : LogifyHandlerFileBuilder |
//| Heritage : No heritage |
//| Description : File handler constructor. |
//| |
//+------------------------------------------------------------------+
class CLogifyHandlerFileBuilder
{
private:
MqlLogifyHandleFileConfig m_config;
CLogifyBuilder *m_parent;
CLogifyFormatter *m_formatter;
CLogifyHandlerFile *m_handler;
public:
CLogifyHandlerFileBuilder(CLogifyBuilder *logify);
~CLogifyHandlerFileBuilder(void);
CLogifyHandlerFileBuilder *SetLevel(ENUM_LOG_LEVEL level);
CLogifyHandlerFileBuilder *SetFormatter(string format);
CLogifyHandlerFileBuilder *SetFormatter(ENUM_LOG_LEVEL level, string format);
CLogifyBuilder *Done(void);
//---
CLogifyHandlerFileBuilder *SetDirectory(string directory);
CLogifyHandlerFileBuilder *SetFilename(string base_filename);
CLogifyHandlerFileBuilder *SetFileExtension(ENUM_LOG_FILE_EXTENSION file_extension);
CLogifyHandlerFileBuilder *SetRotationMode(ENUM_LOG_ROTATION_MODE rotation_mode);
CLogifyHandlerFileBuilder *SetMessagesPerFlush(int messages_per_flush);
CLogifyHandlerFileBuilder *SetCodepage(uint codepage);
CLogifyHandlerFileBuilder *SetFileSizeMB(ulong max_file_size_mb);
CLogifyHandlerFileBuilder *SetMaxFileCount(int max_file_count);
//---
CLogifyHandlerFileBuilder *ConfigNoRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, int msg_per_flush=100, uint cp=CP_UTF8);
CLogifyHandlerFileBuilder *ConfigDateRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, int max_files=10, int msg_per_flush=100, uint cp=CP_UTF8);
CLogifyHandlerFileBuilder *ConfigSizeRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, ulong max_size=5, int max_files=10, int msg_per_flush=100, uint cp=CP_UTF8);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder::CLogifyHandlerFileBuilder(CLogifyBuilder *logify)
{
m_parent = logify;
m_formatter = new CLogifyFormatter();
m_handler = new CLogifyHandlerFile();
m_handler.SetFormatter(GetPointer(m_formatter));
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder::~CLogifyHandlerFileBuilder(void)
{
}
//+------------------------------------------------------------------+
//| Sets the log level for the handler. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetLevel(ENUM_LOG_LEVEL level)
{
m_handler.SetLevel(level);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the default format string for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetFormatter(string format)
{
m_formatter.SetFormat(format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets a log-level-specific format for the formatter. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetFormatter(ENUM_LOG_LEVEL level, string format)
{
m_formatter.SetFormat(level,format);
m_handler.SetFormatter(GetPointer(m_formatter));
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Finalizes the handler configuration. |
//+------------------------------------------------------------------+
CLogifyBuilder *CLogifyHandlerFileBuilder::Done(void)
{
m_parent.AddHandler(GetPointer(m_handler));
delete GetPointer(this);
return(m_parent);
}
//+------------------------------------------------------------------+
//| Sets the directory path where log files will be saved. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetDirectory(string directory)
{
m_config.directory = directory;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the base filename used for log files. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetFilename(string base_filename)
{
m_config.base_filename = base_filename;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the file extension used for log files. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetFileExtension(ENUM_LOG_FILE_EXTENSION file_extension)
{
m_config.file_extension = file_extension;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the rotation mode (none, by size, by date, etc). |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetRotationMode(ENUM_LOG_ROTATION_MODE rotation_mode)
{
m_config.rotation_mode = rotation_mode;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets how many log messages should be written before flushing. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetMessagesPerFlush(int messages_per_flush)
{
m_config.messages_per_flush = messages_per_flush;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the character encoding (codepage) used for the log file. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetCodepage(uint codepage)
{
m_config.codepage = codepage;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the maximum size (in MB) before rotating the log file. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetFileSizeMB(ulong max_file_size_mb)
{
m_config.max_file_size_mb = max_file_size_mb;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Sets the maximum number of log files to keep (for rotation). |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::SetMaxFileCount(int max_file_count)
{
m_config.max_file_count = max_file_count;
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Configures a file handler with no file rotation |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::ConfigNoRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, int msg_per_flush=100, uint cp=CP_UTF8)
{
m_config.CreateNoRotationConfig(base_name,dir,extension,msg_per_flush,cp);
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Configures a file handler to rotate logs based on the date. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::ConfigDateRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, int max_files=10, int msg_per_flush=100, uint cp=CP_UTF8)
{
m_config.CreateDateRotationConfig(base_name,dir,extension,max_files,msg_per_flush,cp);
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Configures a file handler to rotate logs when size is exceeded. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyHandlerFileBuilder::ConfigSizeRotation(string base_name="expert", string dir="logs", ENUM_LOG_FILE_EXTENSION extension=LOG_FILE_EXTENSION_LOG, ulong max_size=5, int max_files=10, int msg_per_flush=100, uint cp=CP_UTF8)
{
m_config.CreateSizeRotationConfig(base_name,dir,extension,max_size,max_files,msg_per_flush,cp);
m_handler.SetConfig(m_config);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| class : CLogifyBuilder |
//| |
//| [PROPERTY] |
//| Name : LogifyBuilder |
//| Heritage : No heritage |
//| Description : Build CLogify objects, following the Builder design|
//| pattern. |
//| |
//+------------------------------------------------------------------+
class CLogifyBuilder
{
private:
CLogify *m_logify;
public:
CLogifyBuilder(void);
~CLogifyBuilder(void);
CLogifyBuilder *UseLanguage(ENUM_LOG_LANGUAGE language);
//--- Starts configuration handlers
CLogifyHandlerCommentBuilder *AddHandlerComment(void);
CLogifyHandlerConsoleBuilder *AddHandlerConsole(void);
CLogifyHandlerDatabaseBuilder *AddHandlerDatabase(void);
CLogifyHandlerFileBuilder *AddHandlerFile(void);
void AddHandler(CLogifyHandler *handler);
CLogify *Build(void);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CLogifyBuilder::CLogifyBuilder(void)
{
m_logify = new CLogify();
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CLogifyBuilder::~CLogifyBuilder(void)
{
}
//+------------------------------------------------------------------+
//| Sets the language for the log |
//+------------------------------------------------------------------+
CLogifyBuilder *CLogifyBuilder::UseLanguage(ENUM_LOG_LANGUAGE language)
{
m_logify.SetLanguage(language);
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Starts configuration for a comment-based log handler. |
//+------------------------------------------------------------------+
CLogifyHandlerCommentBuilder *CLogifyBuilder::AddHandlerComment(void)
{
return(new CLogifyHandlerCommentBuilder(GetPointer(this)));
}
//+------------------------------------------------------------------+
//| Starts configuration for a console-based log handler. |
//+------------------------------------------------------------------+
CLogifyHandlerConsoleBuilder *CLogifyBuilder::AddHandlerConsole(void)
{
return(new CLogifyHandlerConsoleBuilder(GetPointer(this)));
}
//+------------------------------------------------------------------+
//| Starts configuration for a database-based log handler. |
//+------------------------------------------------------------------+
CLogifyHandlerDatabaseBuilder *CLogifyBuilder::AddHandlerDatabase(void)
{
return(new CLogifyHandlerDatabaseBuilder(GetPointer(this)));
}
//+------------------------------------------------------------------+
//| Starts configuration for a file-based log handler. |
//+------------------------------------------------------------------+
CLogifyHandlerFileBuilder *CLogifyBuilder::AddHandlerFile(void)
{
return(new CLogifyHandlerFileBuilder(GetPointer(this)));
}
//+------------------------------------------------------------------+
//| Adds a fully configured log handler to the current Logify object.|
//+------------------------------------------------------------------+
void CLogifyBuilder::AddHandler(CLogifyHandler *handler)
{
m_logify.AddHandler(handler);
}
//+------------------------------------------------------------------+
//| Finalizes the build process and returns the configured Logify. |
//+------------------------------------------------------------------+
CLogify *CLogifyBuilder::Build(void)
{
delete GetPointer(this);
return(GetPointer(m_logify));
}
//+------------------------------------------------------------------+