Diskussion zum Artikel "Beherrschung von Protokollaufzeichnungen (Teil 9): Implementierung des Builder-Musters und Hinzufügen von Standardkonfigurationen"
Haben Sie in Erwägung gezogen, die Protokollierung des Laufzeitstopps hinzuzufügen? Natürlich ist es normal, dass der Entwickler dies im EA handhabt.
TerminalInfoString(TERMINAL_LANGUAGE);
Die Standard-Fehlerausgabesprache des Protokolls kann mit folgendem Code auf die Terminalsprache des Benutzers zurückgesetzt werden
Ich frage mich, ob ich nur Debug- und Fehlermeldungen ausgeben möchte. Und ich habe alle Info, Alert, etc. in der EA gebaut. Vielleicht einen bool-Wert für jeden Typ in 'enum ENUM_LOG_LEVEL' zu setzen, um zu zeigen, was wir wollen?
Für den Produktionscode, wenn wir einige der Protokolle ausschalten, sollte es nicht in die endgültige ex5-Datei kompiliert werden.
Um dies zu erreichen, können Sie eine Variable oder sogar eine IP-Adresse im Experten verwenden, die den gewünschten Level-Wert speichert und einfach an den Handler weitergibt. Hier ist ein Beispiel.
//+------------------------------------------------------------------+ //| Import| //+------------------------------------------------------------------+ #include <Logify/Logify.mqh> CLogify Logify; //+------------------------------------------------------------------+ //| Eingaben| //+------------------------------------------------------------------+ input ENUM_LOG_LEVEL InpLogLevel = LOG_LEVEL_INFO; // Protokollierungsebene //+------------------------------------------------------------------+ //| Experten-Initialisierungsfunktion| //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+
Damit werden nur Meldungen angezeigt, deren Schweregrad größer oder gleich dem im Handler definierten ist.
Die Standard-Fehlerausgabesprache des Protokolls kann mit folgendem Code auf die Terminalsprache des Benutzers zurückgesetzt werden
Teil 10 dieses Artikels ist in der Warteschlange zur Veröffentlichung. Darin wird eine Möglichkeit beschrieben, identische Protokolle zu unterdrücken und die Standardsprache für das Terminal festzulegen. Vielen Dank für die Anregung!
Um dies zu tun, können Sie eine Variable oder sogar eine IP-Adresse im Experten verwenden, die den gewünschten Level-Wert speichert und ihn einfach an den Handler weitergibt. Hier ist ein Beispiel.
Es werden nur Meldungen mit einem Schweregrad angezeigt, der größer oder gleich dem im Handler definierten Schweregrad ist.
Der Autor zeigt, wie man den Schweregrad während der Laufzeit ändern kann, ohne den Code zu ändern.
Ich denke, er möchte nur eine Ebene des Protokolls anzeigen. Er muss den Code wie unten modifizieren:
//--- E.G. void CLogifyHandlerComment::Emit(MqlLogifyModel &data) { //--- Prüfen, ob die Protokollierungsebene zulässig ist if(data.level != this.GetLevel()) // '<' in '!=' ändern { return; } //--- Verschiebungsprotokolle zur Pflege der Historie for(int i = m_config.size-1; i > 0; i--) { m_cache[i] = m_cache[i-1]; } m_cache[0] = data; //--- Erstellen Sie den vollständigen Kommentar string comment = BuildHeader(); comment += FormatLogLines(); comment += BuildFooter(); //--- Anzeige im Diagramm Comment(comment); }
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Beherrschung von Protokollaufzeichnungen (Teil 9): Implementierung des Builder-Musters und Hinzufügen von Standardkonfigurationen :
Seit ich angefangen habe, Logify in verschiedenen privaten und beruflichen Projekten einzusetzen, habe ich schnell gemerkt, dass die größte Herausforderung nicht in der Robustheit oder Funktionalität der Bibliothek selbst liegt, sondern in ihrer Konfiguration. Logify ist ein leistungsfähiges Tool für die Verwaltung von Protokollen in Expert Advisors und bietet mehrere Handler, Protokollebenen, angepasste Formate, Sprachunterstützung und vieles mehr. All dies erforderte jedoch, dass der Nutzer jeden Handler, Formatierer und Parameter manuell konfigurieren musste, was für kleine Projekte gut funktionieren mag, aber schnell zu einer sich wiederholenden, ermüdenden und fehleranfälligen Aufgabe wird, wenn die Anzahl der EAs und Projekte wächst.
Stellen Sie sich vor, Sie müssten für jeden EA denselben komplexen Satz von Konfigurationen replizieren: Erstellen spezifischer Handler für Tabulator-Kommentare, Konsole, Dateien, Datenbanken; Festlegen von Mindeststufen für jeden Handler; Definieren spezifischer Formate für Fehlermeldungen, Debugging, Warnungen und so weiter. Jeder dieser Schritte ist zwar notwendig, erzeugt aber langen, detaillierten und unintuitiven Code, der den Entwicklungsfluss unterbricht. Diese anfängliche Komplexität wird zu einem Hindernis, einer Reibung, die von der Einführung von Logify abhalten kann, selbst wenn es eine tadellose Protokollverwaltung zur Laufzeit bietet.
Diese Erkenntnis hat mich zum Nachdenken angeregt: Wie kann ich diese Konfiguration vereinfachen und dem Nutzer das Leben erleichtern, ohne auf Flexibilität und Anpassbarkeit zu verzichten? An diesem Punkt wurde die Idee geboren, einen Builder für Logify zu entwickeln, eine Klasse, die es Ihnen ermöglicht, die gesamte Konfiguration in einer fließenden, verketteten Weise zusammenzustellen, mit intuitiven Methoden, die Handler mit sinnvollen Mustern erstellen und schnelle, lokale Anpassungen ermöglichen. Ziel ist es, Dutzende von Konfigurationszeilen in einige wenige Methodenaufrufe umzuwandeln, fast so, als ob wir eine klare Zusammenfassung dessen schreiben würden, was wir wollen, anstatt die ganze manuelle Zusammenstellung.
In diesem Artikel werde ich Ihnen zeigen, wie ich diese Verbesserungen umgesetzt habe. Ich werde den Builder vorstellen und seinen Aufbau und seine Verwendung erläutern. Anschließend werde ich anhand von praktischen Beispielen demonstrieren, wie Logify konfiguriert werden kann.
Autor: joaopedrodev