Logging Class for both MQL4 and MQL5 - biblioteca para MetaTrader 5
Classe CDebugLogger: Um utilitário de registro abrangente para MQL4/5
A classe CDebugLogger é um utilitário de registro poderoso e flexível, projetado especificamente para ambientes MQL4/5. É uma ferramenta essencial para os desenvolvedores que precisam monitorar, depurar e rastrear o comportamento de seus aplicativos com precisão. A seguir, exploraremos os principais recursos e capacidades dessa classe.
Principais recursos
- Vários níveis de registro: A classe CDebugLogger é compatível com o registro em log em diferentes níveis de importância, incluindo INFO, WARNING, ERROR e DEBUG. Isso permite que os desenvolvedores filtrem e se concentrem em mensagens de importância específica.
- Inclusão de carimbo de data/hora: Os desenvolvedores podem optar por incluir carimbos de data/hora em suas mensagens de registro, com formatos personalizáveis. Esse recurso é fundamental para rastrear a hora exata dos eventos e depurar problemas sensíveis ao tempo.
- Registro em log de arquivos: A classe oferece suporte robusto para registro em log de arquivos. Os desenvolvedores podem ativar ou desativar o registro em arquivo, especificar o caminho do arquivo de registro e escolher se desejam salvar os registros em uma pasta comum. Além disso, os registros podem ser salvos em um formato CSV, o que facilita a análise e a análise.
- Informações contextuais: Para aumentar a clareza das mensagens de registro, a classe CDebugLogger permite a inclusão de assinaturas de funções, nomes de arquivos e números de linhas. Essas informações contextuais ajudam a identificar o local exato dos problemas no código.
- Palavras-chave silenciosas: Um recurso exclusivo dessa classe é a capacidade de silenciar os registros que contêm palavras-chave específicas. Isso é particularmente útil para evitar que informações sensíveis, como senhas ou dados confidenciais, sejam registradas.
- Filtrar palavras-chave: Outro recurso exclusivo dessa classe é a capacidade de filtrar os logs que contêm palavras-chave específicas. Isso é particularmente útil para a depuração, concentrando-se apenas nos registros que são relevantes para problemas específicos. Os desenvolvedores podem restringir a saída de log para incluir apenas mensagens que contenham determinados termos, facilitando a identificação e a solução de problemas relacionados a esses termos sem serem sobrecarregados por entradas de log não relacionadas.
Exemplo de uso
Abaixo está um exemplo de como inicializar e usar a classe CDebugLogger:
// Inicializar o registrador com o registro de nível INFO em um arquivo CDebugLogger logger(INFO, true, "log.txt", true, TIME_DATE | TIME_MINUTES, false, true, true, true); // Registre uma mensagem simples logger.Log(INFO, "This is an info message"); // Silenciar uma palavra-chave logger.AddSilentKeyword("password"); // Registre uma mensagem que será silenciada logger.Log(INFO, "User entered password: 1234"); // Ativar o registro de arquivos logger.EnableFileLogging(true, "debug.log", false); // Remover uma palavra-chave silenciada logger.RemoveSilentKeyword("password"); // Registre uma mensagem após remover a palavra-chave da lista de silêncio logger.Log(INFO, "User entered password: 1234"); // Adicione uma palavra-chave para filtrar os registros logger.AddFilterKeyword("success"); // Registre uma mensagem que será filtrada logger.Log(INFO, "Operation failed"); // Registre uma mensagem que passará pelo filtro logger.Log(INFO, "Operation successful"); // Remover uma palavra-chave do filtro logger.RemoveFilterKeyword("success"); // Inicializar usando a função genérica Log logging.Initialize(WARNING, true, "warnings.log", true, TIME_SECONDS, true, false, true, true); // Registre um aviso usando a função genérica Log Log(WARNING, "This is a warning message");
Exemplo de script
Para utilizar a classe CDebugLogger em um script, basta incluir a biblioteca necessária no início do arquivo, conforme mostrado abaixo:
//--- É importante incluir esse arquivo de cabeçalho antes de todos os outros #include <Logging.mqh> //+------------------------------------------------------------------+ //| Função de início do programa de script| //+------------------------------------------------------------------+ void OnStart() { //--- Inicialize o registrador com o nível INFO, registrando em um arquivo //--- Incluindo registros de data e hora e salvando no formato CSV int log_options = 0; // NOME DO ARQUIVO | LINHA | FUNCSIG; logging.Initialize(INFO, true, "example_log.txt", true, TIME_DATE | TIME_MINUTES | TIME_SECONDS, false, log_options, true); //--- Registre uma mensagem informativa simples Log(INFO, "Script started successfully."); //--- Registre uma mensagem de aviso Log(WARNING, "This is a warning message."); //--- Registre uma mensagem de erro Log(ERROR, "This is an error message."); //--- Registre uma mensagem de depuração Log(DEBUG, "This is a debug message for debugging purposes."); //--- Adicione uma palavra-chave para silenciar os registros que contenham 'password' logging.AddSilentKeyword("password"); //--- Tentativa de registrar uma mensagem contendo a palavra-chave silenced Log(INFO, "User entered password: 12348"); // Essa mensagem será silenciada //--- Remover a palavra-chave silenciada logging.RemoveSilentKeyword("password"); //--- Registre a mensagem novamente, agora ela será registrada Log(INFO, "User entered password: 1234"); //--- Use a função genérica Log para registrar uma mensagem Log(INFO, "This message is logged using the generic Log function."); //--- Use a macro Print para registrar uma mensagem no nível INFO Print("This message is logged using the Print macro."); //--- Demonstrar o registro em log com diferentes combinações de opções logging.Initialize(INFO, true, "log_with_options.txt", true, TIME_DATE | TIME_MINUTES, false, FILENAME | LINE, true); Log(INFO, "This log includes only the file name and line number."); logging.Initialize(INFO, true, "log_with_funcsig.txt", true, TIME_DATE | TIME_MINUTES | TIME_SECONDS, false, FUNCSIG, true); Log(INFO, "This log includes only the function signature."); logging.Initialize(INFO, true, "log_custom_order.txt", true, TIME_MINUTES, false, LINE | FILENAME | FUNCSIG, true); Log(INFO, "This log includes line number, file name, and function signature in a custom order."); //--- Adicione uma palavra-chave para filtrar os registros que contêm "important logging.AddFilterKeyword("important"); //--- Registre algumas mensagens para demonstrar o filtro Log(INFO, "This is an important message."); // Essa mensagem ficará visível Log(INFO, "This is a regular message."); // Essa mensagem não será visível //--- Remova a palavra-chave filter para mostrar todos os registros logging.RemoveFilterKeyword("important"); //--- Registre uma mensagem final indicando o fim do script Log(INFO, "Script execution completed."); }
Exemplo de saída CSV:
Timestamp,Level,Message "2024.09.01 18:31:44","INFO","Script started successfully." "2024.09.01 18:31:44","WARNING","This is a warning message." "2024.09.01 18:31:44","ERROR","This is an error message." "2024.09.01 18:31:44","DEBUG","This is a debug message for debugging purposes." "2024.09.01 18:31:44","INFO","User entered password: 1234" "2024.09.01 18:31:44","INFO","This message is logged using the generic Log function." "2024.09.01 18:31:44","INFO","This message is logged using the Print macro."
Timestamp,Level,Message,Filename,Line "2024.09.01 18:31","INFO","This log includes only the file name and line number.","Logging.mq5","135"
Timestamp,Level,Message,Funcsig "2024.09.01 18:31:44","INFO","This log includes only the function signature.","void OnStart()"
Timestamp,Level,Message,Filename,Line,Funcsig "18:31","INFO","This log includes line number, file name, and function signature in a custom order.","Logging.mq5","141","void OnStart()" "18:31","INFO","This is an important message.","Logging.mq5","147","void OnStart()" "18:31","INFO","Script execution completed.","Logging.mq5","154","void OnStart()"
Conclusão
A classe CDebugLogger é uma ferramenta inestimável para qualquer desenvolvedor de MQL4/5. Com sua ampla gama de recursos personalizáveis, ela permite o registro e o monitoramento precisos dos aplicativos, facilitando a depuração e o acompanhamento do desempenho do aplicativo. Quer você precise de um simples registro de mensagens ou de informações contextuais detalhadas, a classe CDebugLogger oferece uma solução confiável e eficiente, adaptada às suas necessidades de desenvolvimento.
Para obter mais informações sobre a classe CDebugLogger ou para explorar outras ferramentas e soluções avançadas, visite a StormWave Technologies.
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/51817