J'ai lu votre nom "Best Logging Class", ce qui a attiré mon attention. "Best" place le niveau assez haut, j'étais donc curieux de le vérifier. J'éviterai de parler des détails, car il s'agit d'un code librement distribué qui nécessite d'être indulgent.
Utilisation et fonctionnalités :
- L'idée des mots-clés cachés est bonne. L'implémentation est cependant faible (voir ci-dessous). Et elle rendra silencieux trop de messages, par exemple si j'utilise logging. AddSilentKeyword("start"), il filtrera un log en utilisant "started" ou "starting", ce qui n'est vraiment pas ce que j'attendrais d'un filtrage par "mot-clé".
- Les autres fonctionnalités sont très basiques. Par exemple, comme le coeur de MQL est basé sur les évènements, il est indispensable pour un système de log d'éviter d'inonder le log avec les mêmes entrées répétées, ce qui peut facilement arriver avec un Log() placé dans un OnTick(), OnTimer() ou OnChartEvent().
Du point de vue du codage :
- Votre constructeur et votre Initialize() sont du code dupliqué pour les parties essentielles.
- Votre IsMessageSilent() utilise une boucle de vérification pour chaque mot du m_silent_keywords[] et à l'intérieur de cette boucle vous convertissez les 'mots-clés' en minuscules. A chaque enregistrement ! C'est vraiment inefficace.
- Votre classe est difficilement personnalisable, par exemple si je veux personnaliser le log pour ""File Name : " + __FILE__ + "\n", je devrai modifier votre code, ou dériver une classe et réécrire entièrement la méthode Log(). Le même problème se pose pour toute modification personnalisée nécessaire, par exemple l'utilisation d'un fichier BIN.
- Vous définissez une macro Print() qui remplacera la macro intégrée de MQL. C'est une très mauvaise idée d'obliger l'utilisateur de votre librairie à Print() dans votre journal.
Conclusion :
Votre bibliothèque est une bibliothèque de journalisation de base correcte. Elle peut être pratique pour les débutants ou les codeurs qui n'ont pas le temps de construire leur propre bibliothèque, en leur fournissant des fonctionnalités de journalisation faciles à utiliser.
En aucun cas, l'utilisation du qualificatif "meilleur" n'est justifiée. Les fonctionnalités sont correctes mais basiques, et l'implémentation est d'un niveau amateur.
Conclusion :
Votre bibliothèque est une bibliothèque de journalisation de base correcte. Elle peut être pratique pour les débutants ou les codeurs qui n'ont pas le temps de construire leur propre bibliothèque, en leur fournissant des fonctionnalités de journalisation faciles à utiliser.
En aucun cas, l'utilisation du qualificatif "meilleur" n'est justifiée. Les fonctionnalités sont correctes mais basiques, et l'implémentation est d'un niveau amateur.
Je me rends compte que le terme "meilleur" est peut-être exagéré par rapport à vos attentes. Mon intention était de partager un code facilement modifiable et compréhensible par tous. J'espère cependant avoir apporté une petite contribution à la communauté et que la classe est disponible pour tout le monde. Je vais bientôt procéder à l'optimisation du code comme vous l'avez suggéré.
Merci encore pour vos commentaires.
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.
Je pense que vous devez utiliser des MACROS au lieu de méthodes de classe pour pouvoir émettre le nom du fichier, la signature de la fonction et le numéro de ligne où l'appel au journal s'est produit.
Conclusion :
Votre bibliothèque est une bibliothèque de journalisation de base correcte. Elle peut être pratique pour les débutants ou les codeurs qui n'ont pas le temps de construire leur propre bibliothèque, en leur fournissant des fonctionnalités de journalisation faciles à utiliser.
En aucun cas, l'utilisation du qualificatif "meilleur" n'est justifiée. Les fonctionnalités sont correctes mais basiques, et l'implémentation est d'un niveau amateur.
En ce qui concerne la possibilité de réduire au silence des mots individuels, je pense qu'un moyen efficace est d'écrire simplement "début", en incluant un espace ou un autre caractère. En fin de compte, comme pour d'autres langages, la configuration des journaux a du sens si elle est effectuée dans l'Init . Comme je l'ai dit, il faut que ce soit simple pour que tout le monde puisse l'adopter. Si vous pensez que quelque chose d'autre doit être ajouté, n'hésitez pas à l'écrire, et j'essaierai d'ajouter le code quand j'aurai le temps. En ce qui concerne la fonction "Imprimer", chacun est libre de la commenter s'il le souhaite.
Je suis disponible pour toute autre modification !
Les autres sont des fonctionnalités très basiques. Par exemple, étant donné que le cœur de MQL est axé sur les événements, il est indispensable de disposer d'un système de journalisation afin d'éviter d'inonder le journal avec des entrées identiques répétées, ce qui peut facilement se produire avec un Log() placé dans un OnTick(), OnTimer() ou OnChartEvent().
Comment résoudre ce problème ?
Je vous remercie de votre réponse. J'utilise actuellement votre bibliothèque MQL Plus Enhanced Debugging Support pour imprimer les journaux. Cependant, il arrive qu'une grande quantité de journaux répétitifs soit imprimée et je n'ai pas de méthode pour résoudre ce problème pour le moment. La solution que vous avez suggérée est une approche, et je l'essaierai quand j'aurai le temps. Elle nécessite une conception minutieuse du système de journalisation.
Je vous remercie de votre réponse. J'utilise actuellement votre bibliothèque MQL Plus Enhanced Debugging Support pour imprimer les journaux. Cependant, il arrive qu'elle imprime un grand nombre de journaux répétitifs et je n'ai pas de méthode pour résoudre ce problème pour le moment. La solution que vous avez suggérée est une approche, et je l'essaierai quand j'aurai le temps. Elle nécessite une conception minutieuse du système de journalisation.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Logging Class for both MQL4 and MQL5:
La classe CDebugLogger est un utilitaire de journalisation flexible et complet conçu pour être utilisé dans les environnements MQL4/5. Elle permet aux développeurs d'enregistrer des messages à différents niveaux d'importance (INFO, WARNING, ERROR, DEBUG) avec des options permettant d'inclure des horodatages, des signatures de fonctions, des noms de fichiers et des numéros de lignes dans les entrées du journal. La classe prend en charge la journalisation vers la console et les fichiers, avec la possibilité de sauvegarder les journaux dans un dossier commun et au format CSV. En outre, elle offre une fonctionnalité permettant de réduire au silence les journaux sur la base de mots-clés spécifiques, ce qui garantit que les informations sensibles ne sont pas enregistrées. Cette classe est idéale pour les développeurs qui souhaitent mettre en œuvre des mécanismes de journalisation robustes dans leurs applications MQL4/5, avec des fonctionnalités personnalisables qui répondent à un large éventail de besoins en matière de débogage et de surveillance.
Author: VitalDefender Inc.