Ich habe Ihren Namen "Beste Protokollierungsklasse" gelesen, was meine Aufmerksamkeit erregte. "Best" setzt das Niveau ziemlich hoch, also war ich neugierig, das zu überprüfen. Ich werde es vermeiden, über die Details zu sprechen, da es sich um einen frei verteilten Code handelt, der Nachsicht erfordert.
Verwendung und Funktionen :
- Die Idee mit den versteckten Schlüsselwörtern ist gut. Die Implementierung ist allerdings schwach (siehe unten). Und es wird zu viele Nachrichten verschweigen, zum Beispiel wenn ich logging. AddSilentKeyword("start") verwende, wird ein Log nach "started" oder "starting" gefiltert, was wirklich nicht das ist, was ich von einer "Schlüsselwort"-Filterung erwarten würde.
- Der Rest sind sehr grundlegende Funktionen. Da zum Beispiel der Kern von MQL ereignisgesteuert ist, ist es ein Muss für ein Log-System, um zu vermeiden, dass das Log mit wiederholten gleichen Einträgen überflutet wird, was leicht mit einem Log() in einem OnTick(), OnTimer() oder OnChartEvent() passieren kann.
Vom Standpunkt der Kodierung aus betrachtet:
- Ihr Konstruktor und Ihre Initialize() sind doppelter Code für die wesentlichen Teile.
- Ihre IsMessageSilent() verwendet eine Prüfschleife für jedes Wort der m_silent_keywords[] und innerhalb dieser Schleife konvertieren Sie die 'Schlüsselwörter' in Kleinbuchstaben. Bei jedem Log! Das ist wirklich ineffizient.
- Ihre Klasse ist kaum anpassbar, wenn ich z.B. das Protokoll für ""File Name"" anpassen möchte: " + __FILE__ + "\n" anpassen möchte, muss ich Ihren Code ändern oder eine Klasse ableiten und die Log()-Methode komplett neu schreiben. Dasselbe Problem stellt sich bei jeder benutzerdefinierten Änderung, z. B. bei der Verwendung einer BIN-Datei.
- Sie definieren ein Print()-Makro, das das in MQL eingebaute Makro außer Kraft setzt. Es ist eine sehr schlechte Idee, den Benutzer Ihrer Bibliothek zu zwingen, Print() in Ihrem Log zu verwenden.
Schlussfolgerung:
Ihre Bibliothek ist eine korrekte grundlegende Logging-Bibliothek. Sie kann Anfängern oder Programmierern, die keine Zeit haben, ihre eigene Bibliothek zu erstellen, einige einfach zu verwendende Logging-Funktionen bieten.
Auf keinen Fall ist die Bezeichnung "Beste" gerechtfertigt. Die Funktionen sind korrekt, aber grundlegend, und die Implementierung ist von amateurhaftem Niveau.
Schlussfolgerung:
Ihre Bibliothek ist eine korrekte grundlegende Logging-Bibliothek. Sie kann Anfängern oder Programmierern, die keine Zeit haben, ihre eigene Bibliothek zu erstellen, einige einfach zu verwendende Logging-Funktionen bieten.
Auf keinen Fall ist die Bezeichnung "Beste" gerechtfertigt. Die Funktionen sind korrekt, aber grundlegend, und die Implementierung ist von amateurhaftem Niveau.
Mir ist klar, dass "am besten" im Vergleich zu Ihren Erwartungen eine Übertreibung sein könnte. Meine Absicht war es, einen Code zur Verfügung zu stellen, der von jedem leicht verändert und verstanden werden kann. Ich hoffe jedoch, dass ich einen kleinen Beitrag für die Gemeinschaft geleistet habe und die Klasse für jeden zur Verfügung steht. Ich werde den Code bald optimieren, wie Sie vorgeschlagen haben.
Nochmals vielen Dank für das Feedback.
2024.09.01 14:51:25.011 Logging (EURUSD,M30) File Name: Logging.mqh Function: string CDebugLogger::FormatLogEntry(LogLevel,string) 2024.09.01 14:51 Line: 276 [INFO] Script started successfully.
Ich denke, Sie müssen MACROS anstelle von Klassenmethoden verwenden, um den Dateinamen, die Funktionssignatur und die Zeilennummer, in der der Protokollaufruf erfolgt, ausgeben zu können.
Schlussfolgerung:
Ihre Bibliothek ist eine korrekte grundlegende Logging-Bibliothek. Sie kann Anfängern oder Programmierern, die keine Zeit haben, ihre eigene Bibliothek zu erstellen, einige einfach zu verwendende Logging-Funktionen bieten.
Auf keinen Fall ist die Bezeichnung "Beste" gerechtfertigt. Die Funktionen sind korrekt, aber grundlegend, und die Implementierung ist von amateurhaftem Niveau.
Was die Möglichkeit betrifft, einzelne Wörter stumm zu schalten, so glaube ich, dass eine effiziente Möglichkeit darin besteht, einfach "start" zu schreiben, einschließlich eines Leerzeichens oder eines anderen Zeichens. Letztendlich ist die Konfiguration der Protokolle, wie bei anderen Sprachen auch, sinnvoll, wenn sie im Init erfolgt. Wie bereits erwähnt, muss es einfach sein, damit es von jedem leicht übernommen werden kann. Wenn Sie der Meinung sind, dass noch etwas hinzugefügt werden muss, können Sie es gerne aufschreiben, und ich werde versuchen, den Code hinzuzufügen, wenn ich Zeit habe. Was die Funktion "Drucken" angeht, so kann jeder sie auskommentieren, wenn er möchte.
Ich stehe für alle weiteren Änderungen zur Verfügung!
Der Rest sind sehr grundlegende Funktionen. Da zum Beispiel der Kern von MQL ereignisgesteuert ist, ist es ein Muss für ein Protokollsystem, um zu vermeiden, dass das Protokoll mit wiederholten gleichen Einträgen überflutet wird, was leicht mit einem Log() in einem OnTick(), OnTimer() oder OnChartEvent() passieren kann.
Wie lässt sich dieses Problem lösen?
Vielen Dank für Ihre Antwort. Ich verwende derzeit Ihre Bibliothek MQL Plus Enhanced Debugging Support zum Drucken von Protokollen. Manchmal wird jedoch eine große Menge an sich wiederholenden Protokollen gedruckt, und ich habe im Moment keine Methode, um dieses Problem zu lösen. Die von Ihnen vorgeschlagene Lösung ist ein Ansatz, und ich werde sie ausprobieren, sobald ich Zeit habe. Sie erfordert einen sorgfältigen Entwurf des Protokollierungssystems.
Vielen Dank für Ihre Antwort. Ich verwende derzeit Ihre Bibliothek MQL Plus Enhanced Debugging Support zum Drucken von Protokollen. Manchmal wird jedoch eine große Menge von sich wiederholenden Protokollen gedruckt, und ich habe im Moment keine Methode, um dieses Problem zu lösen. Die von Ihnen vorgeschlagene Lösung ist ein Ansatz, und ich werde sie ausprobieren, sobald ich Zeit habe. Sie erfordert einen sorgfältigen Entwurf des Protokollierungssystems.
- 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.
Logging Class for both MQL4 and MQL5:
Die Klasse CDebugLogger ist ein flexibles und umfassendes Protokollierungsprogramm, das für die Verwendung in MQL4/5-Umgebungen konzipiert wurde. Sie ermöglicht es Entwicklern, Meldungen auf verschiedenen Ebenen der Wichtigkeit (INFO, WARNING, ERROR, DEBUG) zu protokollieren, mit der Option, Zeitstempel, Funktionssignaturen, Dateinamen und Zeilennummern in die Protokolleinträge aufzunehmen. Die Klasse unterstützt die Protokollierung sowohl auf der Konsole als auch in Dateien und bietet die Möglichkeit, Protokolle in einem gemeinsamen Ordner und im CSV-Format zu speichern. Darüber hinaus bietet sie die Möglichkeit, Protokolle auf der Grundlage bestimmter Schlüsselwörter zu unterdrücken, um sicherzustellen, dass sensible Informationen nicht protokolliert werden. Diese Klasse ist ideal für Entwickler, die robuste Logging-Mechanismen in ihren MQL4/5-Anwendungen implementieren möchten, mit anpassbaren Funktionen, die eine breite Palette von Debugging- und Überwachungsanforderungen erfüllen.
Author: VitalDefender Inc.