Discussione sull’articolo "Ricerca di Errori e Registrazione"

 

Il nuovo articolo Ricerca di Errori e Registrazione è stato pubblicato:

MetaEditor 5 ha la funzione di debug. Tuttavia quando scrivi i tuoi programmi MQL5, spesso non vuoi visualizzare solo i singoli valori, ma tutti i messaggi che appaiono durante i test e il lavoro online. Quando il contenuto del file del log è di grandi dimensioni, è ovvio automatizzare il recupero rapido e semplice del messaggio richiesto. In questo articolo considereremo i modi per trovare errori nei programmi MQL5 e i metodi di logging. Inoltre semplificheremo l'accesso ai file e conosceremo un semplice programma LogMon per una comoda visualizzazione dei log.

Ora ti dirò e ti mostrerò come puoi migliorare l'accesso a un file e darti il pratico strumento per visualizzare i log. Questa è l'applicazione per Windows, che ho scritto in C ++ e l'ho chiamata LogMon.

Iniziamo con la scrittura della classe, che farà tutta il logging, vale a dire:

  1. Mantenere la posizione del file, in cui verranno scritte le impostazioni del log e di altre impostazioni del log.
  2. Creare file di log in base al nome e alla data/ora.
  3. Convertire i parametri passati in una riga di log.
  4. Aggiungere tempo al messaggio di log.
  5. Aggiungi il colore del messaggio.
  6. Aggiungi categoria di messaggi.
  7. Memorizza i messaggi nella cache e scrivili una volta per n-secondi o ogni n-messaggi.

Poiché MQL5 è un linguaggio orientato agli oggetti e non differisce significativamente da C ++ nella sua velocità, scriveremo una classe specifica per MQL5. Cominciamo.


Implementazione della Classe di Scrittura del Log nel File

Metteremo la nostra classe in un file di include separato con l'estensione mqh. Ecco la struttura generale della classe.

CLogger

Autore: Дмитрий Александрович

 

Grazie per l'articolo. Per molto tempo ho voluto creare qualcosa di simile, ma non sono riuscito a trovare tutte le mani. E ora... lo sto già usando.

 
papaklass:

Anche a me è piaciuto l'articolo, grazie. Perché MT stampa con dei salti ed è molto scomodo.

I salti sono solo nella scheda "Esperti". Tutti i messaggi sono nel file di log.
 

Ero più interessato a questo o a cose simili:

void PrintDebugInfo(string InputString)
{
  CopyTime(Symbol(),Period(),0,1,Time);
  ArraySetAsSeries(Time,true);
  FileWrite(FileHandle,Time[0],"   ",InputString);
}

Grazie per il codice, lo useremo....

 
Lizar:

Grazie per l'articolo. Per molto tempo ho voluto creare qualcosa di simile, ma non sono riuscito a trovare tutte le mani. E ora... lo sto già usando.

Siete invitati a usarlo! :)
Man mano che lo userete, migliorerò la classe e il programma, perché ho scritto prima per me stesso, e poi mi è venuto in mente l'articolo))))
 

Materiale molto utile!

 

L'exe allegato è ancora in lingua russa. Potete per favore aggiornarlo di nuovo?

P.S. Questo è davvero utile! Una delle prime classi che dovrebbero essere dichiarate in ogni progetto OOP è quella che gestisce gli errori!

 
Grazie per il commento. Ora è possibile trovare la versione inglese corretta di questa utility nei file allegati.
 

Se si dimentica di usare il flush, si può verificare una perdita di dati.

Una soluzione migliore sarebbe la seguente:


private:
   void              flush(void);              // Caricamento della cache nel file
//+------------------------------------------------------------------+
//| Deinizializzazione|
//+------------------------------------------------------------------+
void CLogger::deinit(void)
  {
   flush();  // Risciacquare i dati
   FileClose(handleFile); // Chiudere il file
  }

In modo che il salvataggio dei dati avvenga automaticamente.

ps.: Mi dispiace se ho offeso l'ortografia, il traduttore di Google mi ha aiutato ...

 

Dmitry Alexandrovich, grazie per il tuo lavoro, ho cercato a lungo qualcosa di simile e finalmente l'ho trovato ))

suggerimento per migliorare logmon.exe, per fare un'impostazione che sarebbe in grado di specificare i percorsi in cui cercare i file con i log, perché per avere due copie in cartelle diverse (per il tester e il lavoro standard) in qualche modo amatoriale ))

anche se forse lo finirò io stesso quando ci metterò le mani sopra ))

se hai qualcos'altro di utile - postalo, il tuo stile di programmazione e presentazione del materiale è molto cervellotico )).

 

Ricevo un errore quando eseguo il debug sui dati storici: "MQL5 debugger failed to start debugging 'testlogger.ex5' on history". Sui dati reali funziona bene.

Potete dirmi cosa devo modificare per farlo funzionare sulla cronologia?