Discussão do artigo "A arte de trabalhar com logs (Parte 9): aplicando o padrão Builder e definindo configurações padrão"
Você já pensou em adicionar o registro de erros em tempo de execução? É claro que é normal que o desenvolvedor cuide disso na versão EA.
TerminalInfoString(TERMINAL_LANGUAGE);
O idioma padrão de exibição de erros do log pode ser ajustado para o idioma do terminal do usuário de acordo com este código
Estou pensando se não seria melhor exibir apenas mensagens de depuração e de erro. E já tenho todas as mensagens de informação, alerta etc. integradas ao EA. Talvez seja possível definir um valor booleano para cada tipo na ‘enum ENUM_LOG_LEVEL’ para mostrar o que queremos?
No código de produção, se desativarmos alguns dos registros, eles não devem ser compilados no arquivo ex5 final.
Para fazer isso, você pode usar uma variável ou até mesmo um endereço IP no expert que armazene o valor do nível desejado e simplesmente o passe para o manipulador. Aqui está um exemplo.
//+------------------------------------------------------------------+ //| Importação | //+------------------------------------------------------------------+ #include <Logify/Logify.mqh> CLogify Logify; //+------------------------------------------------------------------+ //| Entradas | //+------------------------------------------------------------------+ input ENUM_LOG_LEVEL InpLogLevel = LOG_LEVEL_INFO; // Nível de registro //+------------------------------------------------------------------+ //| Função de inicialização do Expert | //+------------------------------------------------------------------+ int OnInit() { Logify.EnsureDefaultHandler(); Logify.GetHandler(0).SetLevel(InpLogLevel); Logify.Debug("RSI indicator value calculated: 72.56", "Indicators", "Period: 14"); Logify.Info("Buy order sent successfully", "Order Management", "Symbol: EURUSD, Volume: 0.1"); Logify.Error("Failed to send sell order", 10016,"Order Management"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+
Isso exibirá apenas mensagens com um nível de gravidade maior ou igual ao definido no manipulador.
O idioma padrão de exibição de erros do log pode ser ajustado para o idioma do terminal do usuário de acordo com este código
A Parte 10 deste artigo está na fila para publicação. Ela aborda uma maneira de suprimir registros idênticos e também define o idioma padrão do terminal. Obrigado pela sugestão!
Para fazer isso, você pode usar uma variável ou até mesmo um endereço IP no expert que armazene o valor do nível desejado e simplesmente o passe para o manipulador. Aqui está um exemplo.
Isso exibirá apenas mensagens com um nível de gravidade maior ou igual ao definido no manipulador.
O autor mostra como alterar o nível em tempo de execução sem modificar o código.
Acho que ele só quer mostrar um único nível de log. Ele precisa modificar o código da seguinte forma:
//--- Por exemplo: void CLogifyHandlerComment::Emit(MqlLogifyModel &data) { //--- Verificar se o nível de log é permitido if(data.level != this.GetLevel()) // substitua '<' por '!=' { return; } //--- Registros de turnos para manter o histórico for(int i = m_config.size-1; i > 0; i--) { m_cache[i] = m_cache[i-1]; } m_cache[0] = data; //--- Construir o comentário completo string comment = BuildHeader(); comment += FormatLogLines(); comment += BuildFooter(); //--- Exibir no gráfico Comment(comment); }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo A arte de trabalhar com logs (Parte 9): aplicando o padrão Builder e definindo configurações padrão foi publicado:
Desde que comecei a utilizar a Logify em diversos projetos pessoais e profissionais, percebi rapidamente que a maior dificuldade não estava na confiabilidade nem nos recursos da biblioteca, mas em sua configuração. A Logify é uma ferramenta poderosa para gerenciar logs em EAs (Expert Advisors), oferecendo diversos handlers, níveis de log, formatos personalizáveis, suporte a diferentes idiomas e muito mais. No entanto, tudo isso exigia que o usuário configurasse manualmente cada handler, formatador e parâmetro. Embora esse procedimento seja aceitável em projetos pequenos, ele rapidamente se torna uma tarefa repetitiva, cansativa e sujeita a erros à medida que aumenta o número de EAs e projetos.
Imagine ter que reproduzir o mesmo conjunto complexo de configurações para cada EA: criar handlers específicos para exibir comentários no gráfico, enviar mensagens ao console e gravar registros em arquivos e bancos de dados; definir os níveis mínimos de log para cada handler; estabelecer formatos específicos para mensagens de erro, informações de depuração, notificações e assim por diante. Embora necessária, cada uma dessas etapas acaba exigindo um código extenso, cheio de detalhes e pouco intuitivo, prejudicando o fluxo de desenvolvimento. Isso pode até desestimular o uso da Logify, apesar de sua excelente capacidade de gerenciar logs durante a execução.
Essa constatação me levou a uma reflexão: como simplificar a configuração e facilitar a vida do usuário sem abrir mão da flexibilidade e das possibilidades de personalização? Foi então que surgiu a ideia de criar uma classe Builder para a Logify, capaz de reunir toda a configuração em uma sequência fluida de chamadas encadeadas. Com métodos intuitivos, seria possível criar handlers com configurações padrão adequadas e realizar ajustes pontuais de maneira rápida e precisa. O objetivo é reduzir dezenas de linhas de configuração a algumas chamadas de métodos, como se estivéssemos escrevendo uma descrição clara do que queremos obter, em vez de montar tudo manualmente.
Neste artigo, mostrarei como implementei essas melhorias. Apresentarei a classe Builder, explicando sua estrutura e como utilizá-la. Em seguida, demonstrarei, com exemplos práticos, como configurar a Logify.
Autor: joaopedrodev