Logify is a logging library for MQL designed to simplify debugging, tracking, and monitoring of EAs and indicators. It provides structured, customizable, and organized logs directly on the chart or in the terminal, with support for log levels, flexible formats, and multiple handlers. A lightweight, elegant solution that is easy to integrate into your MQL projects.
Find a file
2025-08-27 09:34:46 -03:00
Error initial commit 2025-08-21 11:59:58 -03:00
Formatter initial commit 2025-08-21 11:59:58 -03:00
Handlers initial commit 2025-08-21 11:59:58 -03:00
Suppression initial commit 2025-08-21 11:59:58 -03:00
Utils initial commit 2025-08-21 11:59:58 -03:00
Logify.mqh initial commit 2025-08-21 11:59:58 -03:00
LogifyBuilder.mqh initial commit 2025-08-21 11:59:58 -03:00
LogifyLevel.mqh initial commit 2025-08-21 11:59:58 -03:00
LogifyModel.mqh initial commit 2025-08-21 11:59:58 -03:00
README.md update readme 2025-08-27 09:34:46 -03:00

Logify

Logify is a logging library for MQL designed to simplify debugging, tracking, and monitoring of EAs and indicators. It provides structured, customizable, and organized logs directly on the chart or in the terminal, with support for log levels, flexible formats, and multiple handlers. A lightweight, elegant solution that is easy to integrate into your MQL projects.

📦 Features

  • Multiple log levels: DEBUG, INFO, ALERT, ERROR, FATAL
  • Display logs directly on graph, terminal, files or even database
  • Customizable log format and layout
  • Modular architecture with multiple handlers
  • Lightweight and easy to integrate and use

🚀 Installation

You can install Logify in two ways:

  1. Clone the Logify repository in the terminal folder (Usually at C:\Users\YOUR_USER\AppData\Roaming\MetaQuotes\Terminal\YOUR_ID\MQL5):

    git clone https://forge.mql5.io/joaopedrodev/Logify
    
  2. After cloning, you will have a new MQL5/Logify folder with the following structure:

    MQL5/Logify/
    ├── Experts/    # Contains EA examples
    └── Include/    # Contains the Logify library
    
  3. Copy the files to their respective folders:

    • Copy the content from MQL5/Logify/ExpertsMQL5/Experts
    • Copy the content from MQL5/Logify/IncludeMQL5/Include
  4. Done! The library is installed and the examples are ready to use.

Option 2: Manual Download

  1. Download the code and copy the downloaded content to their respective folders:
    • Copy the content from 59821/mql5/Logify/ExpertsMQL5/Experts
    • Copy the content from 59821/mql5/Logify/IncludeMQL5/Include

Including in your project

After installation (by any of the options above), include Logify in your EA, indicator or script:

#include <Logify/Logify.mqh>

🔧 Quick Start Example

Simple example with default settings:

//+------------------------------------------------------------------+
//| Import                                                           |
//+------------------------------------------------------------------+
#include <Logify/Logify.mqh>
CLogify Logify;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Example logs
   Logify.Debug("Initialization started");
   Logify.Info("Account balance is OK");
   Logify.Alert("Take profit reached");
   Logify.Error("Failed to send order", "Order", "Reason: No money");
   Logify.Fatal("Critical error: Invalid input parameters");

   //---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Advanced example, with custom handler settings. In this example, we save the log record to files and in the graph comment. Customizing the settings for each of them.

//+------------------------------------------------------------------+
//| Import                                                           |
//+------------------------------------------------------------------+
#include <Logify/Logify.mqh>
CLogify Logify;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Configure comment handler
   MqlLogifyHandleCommentConfig config_comment;
   config_comment.size = 10;
   config_comment.frame_style = LOG_FRAME_STYLE_SINGLE;
   config_comment.direction = LOG_DIRECTION_UP;
   config_comment.title = "My Expert";

   //--- Create and configure comment handler
   CLogifyHandlerComment *handler_comment = new CLogifyHandlerComment();
   handler_comment.SetConfig(config_comment);
   handler_comment.SetLevel(LOG_LEVEL_DEBUG);
   handler_comment.SetFormatter(new CLogifyFormatter("{date_time} [{levelname}]: {msg}","hh:mm:ss"));
   
   //--- Configure file handler
   MqlLogifyHandleFileConfig file_config;
   file_config.CreateDateRotationConfig("my_expert","logs",LOG_FILE_EXTENSION_LOG,10,100,CP_UTF8);
   
   //--- Create and configure file handler
   CLogifyHandlerFile *handler_file = new CLogifyHandlerFile();
   handler_file.SetConfig(file_config);
   handler_file.SetLevel(LOG_LEVEL_DEBUG);
   handler_file.SetFormatter(new CLogifyFormatter("{date_time} [{levelname}]: {msg} ({filename} | {origin} | {function})","hh:mm:ss"));
   
   //--- Attach handler
   Logify.AddHandler(handler_comment);
   Logify.AddHandler(handler_file);

   //--- Example logs
   Logify.Debug("Initialization started");
   Logify.Info("Account balance is OK");
   Logify.Alert("Take profit reached");
   Logify.Error("Failed to send order", "Order", "Reason: No money");
   Logify.Fatal("Critical error: Invalid input parameters");
   
   //---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

To understand each of the settings, I recommend reading the articles below, where I explain each step of the library development:

✔️ Log Levels

Level Description
DEBUG Verbose information for debug
INFO General information
WARNING Warnings or important events
ERROR Errors that require attention
FATAL Critical errors, stop execution

🖥️ Handlers Included

Each handler defines where the logs will be displayed or stored.

Handler Description
Comment Display logs directly on the graph (Comment)
Console Show logs in MetaTrader terminal
File Save logs to .txt or .log files
Database Stores logs in local SQLite database

You can use one or combine several handlers at the same time, like graphic + file + console, for example.

🛠️ Log Format

Example of formatting pattern:

"{date_time} [{levelname}]: {msg}"

Available tokens:

  • {levelname}: Level name (DEBUG, INFO, ERROR, etc.)
  • {msg}: Main message
  • {args}: Additional arguments or details
  • {timestamp}: Timestamp in seconds (Unix Time)
  • {date_time}: Formatted date and time (hh:mm:ss, etc.)
  • {level}: Numeric code for the level (0 = DEBUG, 1 = INFO...)
  • {origin}: Origin or context defined in the log call
  • {filename}: Source file name (if available)
  • {function}: Name of the function from which it was called
  • {line}: Line number in the code where the log occurred

⚖️ License

MIT License — Free to use for personal and commercial projects.

👨‍💻 Author

Developed by joaopedrodev, with a focus on making MQL development more professional, organized and efficient.