Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Librerie

Logging Class for both MQL4 and MQL5 - libreria per MetaTrader 5

Visualizzazioni:
48
Valutazioni:
(7)
Pubblicato:
\MQL5\Include\
Logging.mqh (44.87 KB) visualizza
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Classe CDebugLogger: Un'utilità di registrazione completa per MQL4/5

La classe CDebugLogger è un'utilità di registrazione potente e flessibile, progettata specificamente per gli ambienti MQL4/5. È uno strumento essenziale per gli sviluppatori che devono monitorare e tracciare il comportamento delle loro applicazioni con precisione. È uno strumento essenziale per gli sviluppatori che hanno bisogno di monitorare, debuggare e tracciare con precisione il comportamento delle loro applicazioni. Di seguito, esploriamo le caratteristiche e le funzionalità principali di questa classe.

Caratteristiche principali

  • Livelli multipli di log: La classe CDebugLogger supporta la registrazione a diversi livelli di importanza, tra cui INFO, WARNING, ERROR e DEBUG. Ciò consente agli sviluppatori di filtrare e concentrarsi sui messaggi di particolare importanza.
  • Inclusione del timestamp: Gli sviluppatori possono scegliere di includere i timestamp nei messaggi di log, con formati personalizzabili. Questa funzione è fondamentale per tracciare l'ora esatta degli eventi e per il debug di problemi sensibili al tempo.
  • Registrazione dei file: La classe fornisce un solido supporto per la registrazione su file. Gli sviluppatori possono attivare o disattivare la registrazione su file, specificare il percorso del file di log e scegliere se salvare i log in una cartella comune. Inoltre, i log possono essere salvati in formato CSV, per facilitarne l'analisi.
  • Informazioni contestuali: Per migliorare la chiarezza dei messaggi di log, la classe CDebugLogger consente di includere firme di funzioni, nomi di file e numeri di riga. Queste informazioni contestuali aiutano a individuare l'esatta posizione dei problemi all'interno del codice.
  • Parole chiave silenziose: Una caratteristica unica di questa classe è la possibilità di silenziare i log che contengono parole chiave specifiche. Ciò è particolarmente utile per evitare che vengano registrate informazioni sensibili, come password o dati riservati.
  • Filtro parole chiave: Un'altra caratteristica unica di questa classe è la possibilità di filtrare i registri che contengono parole chiave specifiche. Ciò è particolarmente utile per il debug, concentrandosi solo sui registri che sono rilevanti per problemi specifici. Gli sviluppatori possono restringere l'output dei registri per includere solo i messaggi che contengono determinati termini, rendendo più facile identificare e risolvere i problemi relativi a tali termini senza essere sommersi da voci di registro non correlate.

Esempio di utilizzo

Di seguito è riportato un esempio di inizializzazione e utilizzo della classe CDebugLogger:

// Inizializza il logger con la registrazione del livello INFO in un file.
CDebugLogger logger(INFO, true, "log.txt", true, TIME_DATE | TIME_MINUTES, false, true, true, true);

// Registra un semplice messaggio
logger.Log(INFO, "This is an info message");

// Silenziare una parola chiave
logger.AddSilentKeyword("password");

// Registra un messaggio che verrà tacitato
logger.Log(INFO, "User entered password: 1234");

// Abilita la registrazione dei file
logger.EnableFileLogging(true, "debug.log", false);

// Rimuovere una parola chiave silenziata
logger.RemoveSilentKeyword("password");

// Registra un messaggio dopo aver rimosso la parola chiave dall'elenco del silenzio
logger.Log(INFO, "User entered password: 1234");

// Aggiungere una parola chiave per filtrare i log
logger.AddFilterKeyword("success");

// Registrare un messaggio che verrà filtrato
logger.Log(INFO, "Operation failed");

// Registrare un messaggio che superi il filtro
logger.Log(INFO, "Operation successful");

// Rimuovere una parola chiave dal filtro
logger.RemoveFilterKeyword("success");

// Inizializza utilizzando la funzione generica Log
logging.Initialize(WARNING, true, "warnings.log", true, TIME_SECONDS, true, false, true, true);

// Registra un avviso usando la funzione generica Log
Log(WARNING, "This is a warning message");

Esempio di script

Per utilizzare la classe CDebugLogger in uno script, è sufficiente includere la libreria necessaria all'inizio del file, come mostrato di seguito:

//--- È importante includere questo file header prima di tutti gli altri
#include <Logging.mqh>  


//+------------------------------------------------------------------+
//| Funzione di avvio del programma di script|
//+------------------------------------------------------------------+
void OnStart()
{
   //--- Inizializzare il logger con il livello INFO, con registrazione su un file
   //--- Includere i timestamp e salvare in formato CSV
   int log_options = 0; // NOME DEL FILE | LINEA | FUNCSIG;
   logging.Initialize(INFO, true, "example_log.txt", true, TIME_DATE | TIME_MINUTES | TIME_SECONDS, false, log_options, true);

   //-- Registra un semplice messaggio informativo
   Log(INFO, "Script started successfully.");

   //-- Registra un messaggio di avviso
   Log(WARNING, "This is a warning message.");

   //--- Registra un messaggio di errore
   Log(ERROR, "This is an error message.");

   //-- Registra un messaggio di debug
   Log(DEBUG, "This is a debug message for debugging purposes.");

   //--- Aggiungere una parola chiave per silenziare i log contenenti 'password'.
   logging.AddSilentKeyword("password");

   //--- Tentativo di registrare un messaggio contenente la parola chiave silenziato
   Log(INFO, "User entered password: 12348"); // Questo messaggio verrà tacitato

   //--- Rimuovere la parola chiave silenziata
   logging.RemoveSilentKeyword("password");

   //--- Registrare di nuovo il messaggio, ora sarà registrato
   Log(INFO, "User entered password: 1234");

   //--- Usare la funzione generica Log per registrare un messaggio
   Log(INFO, "This message is logged using the generic Log function.");

   //--- Usare la macro Stampa per registrare un messaggio a livello INFO
   Print("This message is logged using the Print macro.");

   //--- Dimostrare la registrazione con diverse combinazioni di opzioni
   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.");

   //--- Aggiungere una parola chiave per filtrare i registri contenenti "importante".
   logging.AddFilterKeyword("important");

   //--- Registra alcuni messaggi per dimostrare il filtro
   Log(INFO, "This is an important message."); // Questo messaggio sarà visibile
   Log(INFO, "This is a regular message.");    // Questo messaggio non sarà visibile

   //--- Rimuovere la parola chiave "filtro" per mostrare tutti i log.
   logging.RemoveFilterKeyword("important");

   //--- Registra un messaggio finale che indica la fine dello script
   Log(INFO, "Script execution completed.");
}

Esempio di output 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()"

Conclusione

La classe CDebugLogger è uno strumento prezioso per qualsiasi sviluppatore MQL4/5. Con la sua ampia gamma di funzioni personalizzabili, consente di registrare e monitorare con precisione le applicazioni, facilitando il debug e il monitoraggio delle prestazioni. Sia che abbiate bisogno di una semplice registrazione dei messaggi o di informazioni contestuali dettagliate, la classe CDebugLogger fornisce una soluzione affidabile ed efficiente, adatta alle vostre esigenze di sviluppo.

Per ulteriori informazioni sulla classe CDebugLogger o per esplorare altri strumenti e soluzioni avanzate, visitate il sito StormWave Technologies.

Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/51817

Max trade volume checker for your trading account Max trade volume checker for your trading account

Una finestra di dialogo per visualizzare la dimensione massima del lotto consentita sul sottostante per diversi tipi di ordini (acquisto, vendita, acquisto in attesa e vendita in attesa).

IncAMAOnArray IncAMAOnArray

La classe SAMAOnAgro è destinata al calcolo dei valori degli indicatori AMA (Adaptive Moving Average) da parte dei buffer degli indicatori.

Candele X2MA Transform Candele X2MA Transform

L'indicatore trasferisce i dati di prezzo in un nuovo sistema di coordinate, associato ai valori dell'indicatore X2MA.

XTrendlessOS (oscillatore di assenza di tendenze) XTrendlessOS (oscillatore di assenza di tendenze)

L'indicatore è scritto secondo la descrizione fornita nel libro di Joe DiNapoli "Trading Using DiNapoli Levels". L'indicatore è stato progettato per valutare il reale ipercomprato/ipervenduto del mercato.