Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

Simplest Logger class for MetaTrader 5 - Bibliothek für den MetaTrader 5

Ansichten:
158
Rating:
(5)
Veröffentlicht:
\MQL5\Include\DKStdLib\Logger\
CDKLogger.mqh (26.27 KB) ansehen
\MQL5\Scripts\
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Jeder Programmierer hat seinen eigenen Logger. Ich habe meinen eigenen für MQL5 geschrieben, inspiriert durch das Python-Logging-Modul.

Diese Klasse ist die einfachste. Keine Hierarchie, Rotatoren oder Formatierer. Sie ist einfach und praktisch für jedes Projekt.

Installation

  1. Kopieren Sie CDKLogger.mqh in den Ordner MQL\Include\DKStdLib\Logger.
  2. Importieren Sie die Klasse CDKLogger.

#include <DKStdLib\Logger\CDKLogger.mqh

Verwendung

CDKLogger logger;

// SCHRITT 1: Logger mit dem Namen "MyLoggerName" und der Stufe INFO initialisieren
logger.Init("MyLoggerName", INFO);

// Sie können das Standardformat des Loggers "%name%:[%level%] %message%" in Ihr eigenes Format ändern
// Beliebige Musterkombinationen verwenden 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// SCHRITT 2: Wenn Sie die Nachricht nur mit Untertiteln filtern möchten,
// Füllen der FilterInList 
// 2.1. Hinzufügen einer Untergruppe zu FilterIntList
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2. Zeichenkette durch ";" trennen, um alle Teilzeichenfolgen in einer Zeile zu FilterInList hinzuzufügen
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// SCHRITT 3: Wenn Sie die OUT-Nachricht nach Teilzeichenfolgen filtern möchten, alle anderen aber nicht,
// Füllen der FilterOutList 
// 3.1. Hinzufügen eines Teilstrings zur FilterOutList
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2. Zeichenkette durch ";" trennen, um alle Teilzeichenfolgen in einer Zeile zur FilterOutList hinzuzufügen
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // Verwenden Sie Filter In und fügen Sie hier Ihren Filterstring getrennt durch ; ein.

// SCHRITT 4: Protokollierung
logger.Debug("Debug: Including-Substring-#1", false);                  // Debuggen ohne Warnung
logger.Info("Info: Including-Substring-#1", true);                     // Info mit Warndialog
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // Übersprungen aufgrund von FilterOutList
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // wenn ok
              "Log msg if false", ERROR, // wenn nicht
              true);                     // Auch Alert anzeigen
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // Protokollierungsstufe, wenn ok
              ERROR,  // Protokollstufe bei Fehlschlag
              false); // Kein Alert 

Die folgenden Meldungen werden als Ergebnis der Ausführung in das Protokoll ausgegeben:

Offene Probleme

Ich verwende die Klasse oft auf diese Weise:

logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                          __FUNCTION__, __LINE__,
                          my_param));

Aber hier haben wir ein Problem. Die Funktion StringFormat parst die Zeichenkette jedes Mal, auch wenn die Protokollierungsebene die Ausgabe der Nachricht nicht erfordert.

Wenn Sie häufig Debug-Meldungen ausgeben müssen, müssen Sie die Ausgabe in eine Bedingung verpacken:

if(DEBUG >= logger.Level)                          
  logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                            __FUNCTION__, __LINE__,
                            my_param));      

Der beste Weg, dies zu tun, wäre, StringFormat lazily zu verwenden, aber leider unterstützt MQL5 nicht die Übergabe einer dynamischen Anzahl von Funktionsparametern an die Funktionen Debug, Info, Error usw.

Wenn Sie irgendwelche Ideen haben, wie dies getan werden könnte, würde ich sie gerne hören.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/52741

Ascending Sort A Struct Array By A Field Example Ascending Sort A Struct Array By A Field Example

Dies ist ein Beispiel für die aufsteigende Sortierung einer Strukturliste nach einem Feld. Sie können herausfinden, und passen Sie die oben genannten Algorithmus je nach Zweck der Verwendung, das ist die grundlegendste Beispiel ist auch eine Richtung, um die Anordnung in einem Array von Struktur zu lösen. Der Algorithmus in diesem Beispiel verwendet wird, Quick Sort und Merge Sort.

Bollinger Bands Crossover Signals Bollinger Bands Crossover Signals

Indikatorbeschreibung - Bollinger Bands Crossover Signals Name: Bollinger Bands Crossover Signals Version: 1.1 Autor: BENALI Link: https://www.mql5.com/en/users/dahmi_benali

TimeServerDaylightSavings TimeServerDaylightSavings

Zeitbezogene Funktionen zur empirischen Erkennung von Serverzeitzone und Sommerzeit (DST) aus der Historie der Angebote

Custom crosshair cursor with synchronization Custom crosshair cursor with synchronization

Synchronisierter benutzerdefinierter Fadenkreuzindikator, der den Preis und die (Server-/lokale) Zeit anzeigt.