Logify é uma biblioteca de registros para MQL projetada para simplificar a depuração, o rastreamento e o monitoramento de EAs e indicadores. Ela fornece registros estruturados, personalizáveis e organizados diretamente no gráfico ou no terminal, com suporte para níveis de registro, formatos flexíveis e múltiplos manipuladores. Uma solução leve e elegante, fácil de integrar aos seus projetos MQL.
- Múltiplos níveis de log: DEBUG, INFO, ALERTA, ERRO, FATAL
- Exibe logs diretamente no gráfico, terminal, arquivos ou até mesmo no banco de dados
- Formato e layout de log personalizáveis
- Arquitetura modular com múltiplos manipuladores
- Leve e fácil de integrar e usar
- Copie a pasta /Logify para:
MQL5/Include/- Inclua o Logify no seu EA, indicador ou script:
#include <Logify/Logify.mqh>Exemplo simples com configurações padrão:
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+Exemplo avançado, com configurações personalizadas do manipulador. Neste exemplo, salvamos o registro de log em arquivos e no comentário do gráfico. Personalizamos as configurações para cada um deles.
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+Para entender cada uma das configurações, recomendo a leitura dos artigos abaixo, onde explico cada etapa do desenvolvimento da biblioteca:
- Mastering Log Records (Part 1): Fundamental Concepts and First Steps in MQL5
- Mastering Log Records (Part 2): Formatting Logs
- Mastering Log Records (Part 3): Exploring Handlers to Save Logs
- Mastering Log Records (Part 4): Saving Logs to Files
- Mastering Log Records (Part 5): Optimizing the Handler with Cache and Rotation
- Mastering Log Records (Part 6): Saving Logs to Database
- Mastering Log Records (Part 7): How to Show Logs on Chart
- Mastering Log Records (Part 8): Error Records That Translate Themselves
- Mastering Log Records (Part 9): Implementing the builder pattern and adding default configurations
- Mastering Log Records (Part 10): Avoiding Log Replay by Implementing a Suppression
| Nível | Descrição |
|---|---|
| DEBUG | Informações detalhadas para depuração |
| INFO | informações gerais |
| WARNING | Avisos ou eventos importantes |
| ERROR | Erros que requerem atenção |
| FATAL | Erros críticos, interromper execução |
Cada manipulador define onde os logs serão exibidos ou armazenados.
| Handler | Descrição |
|---|---|
| Comment | Exibir logs diretamente no gráfico (Comentário) |
| Console | Mostrar logs no terminal MetaTrader |
| File | Salvar logs em arquivos .txt ou .log |
| Database | Armazena logs no banco de dados SQLite local |
Você pode usar um ou combinar vários manipuladores ao mesmo tempo, como gráfico + arquivo + console, por exemplo.
Exemplo de padrão de formatação:
"{date_time} [{levelname}]: {msg}"Tokens disponíveis:
- {levelname}: Nome do nível (DEBUG, INFO, ERROR, etc.)
- {msg}: Mensagem principal
- {args}: Argumentos ou detalhes adicionais
- {timestamp}: Carimbo de data/hora em segundos (Horário Unix)
- {date_time}: Data e hora formatadas (hh:mm:ss, etc.)
- {level}: Código numérico para o nível (0 = DEBUG, 1 = INFO...)
- {origin}: Origem ou contexto definido na chamada do log
- {filename}: Nome do arquivo de origem (se disponível)
- {function}: Nome da função da qual foi chamado
- {line}: Número da linha no código onde o log ocorreu
Licença MIT — Gratuita para uso em projetos pessoais e comerciais.
Desenvolvido por joaopedrodev, com foco em tornar o desenvolvimento MQL mais profissional, organizado e eficiente.