An open API service indexing awesome lists of open source software.

https://github.com/joaopedrodevms/logify


https://github.com/joaopedrodevms/logify

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# Logify

**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.

## 📦 Funcionalidades

- 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

## 🚀 Instalação

1. Copie a pasta /Logify para:
``` shell
MQL5/Include/
```
2. Inclua o Logify no seu EA, indicador ou script:

``` c++
#include
```

## 🔧 Exemplo de início rápido

Exemplo simples com configurações padrão:
``` c++
//+------------------------------------------------------------------+
//| Import |
//+------------------------------------------------------------------+
#include
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.
``` c++
//+------------------------------------------------------------------+
//| Import |
//+------------------------------------------------------------------+
#include
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](https://www.mql5.com/en/articles/16447)
- [Mastering Log Records (Part 2): Formatting Logs](https://www.mql5.com/en/articles/16833)
- [Mastering Log Records (Part 3): Exploring Handlers to Save Logs](https://www.mql5.com/en/articles/16866)
- [Mastering Log Records (Part 4): Saving Logs to Files](https://www.mql5.com/en/articles/16986)
- [Mastering Log Records (Part 5): Optimizing the Handler with Cache and Rotation](https://www.mql5.com/en/articles/17137)
- [Mastering Log Records (Part 6): Saving Logs to Database](https://www.mql5.com/en/articles/17709)
- [Mastering Log Records (Part 7): How to Show Logs on Chart](https://www.mql5.com/en/articles/18291)
- [Mastering Log Records (Part 8): Error Records That Translate Themselves](https://www.mql5.com/en/articles/18467)
- [Mastering Log Records (Part 9): Implementing the builder pattern and adding default configurations](https://www.mql5.com/en/articles/18602)
- [Mastering Log Records (Part 10): Avoiding Log Replay by Implementing a Suppression](https://www.mql5.com/en/articles/19014)

## ✔️ Níveis de Log

| 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 |

## 🖥️ Handlers incluídos

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.

## 🛠️ Formato de log

Exemplo de padrão de formatação:
``` c++
"{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

Licença MIT — Gratuita para uso em projetos pessoais e comerciais.

## 👨‍💻 Autor

Desenvolvido por [joaopedrodev](https://www.mql5.com/en/users/joaopedrodev), com foco em tornar o desenvolvimento MQL mais profissional, organizado e eficiente.