我读到了您的 "最佳记录类 "名称,这引起了我的注意。"最佳 "是一个相当高的级别,所以我很想了解一下。我不想谈细节,因为这是自由发布的代码,需要放任自流。
使用方法和功能
- 您隐藏关键词的想法很好。但实现起来比较弱(见下文)。例如,如果我使用 logging.AddSilentKeyword(AddSilentKeyword("start"),它就会使用 "started "或 "starting "过滤日志,这实在不是我所期望的 "关键字 "过滤。
- 其余的都是非常基本的功能。例如,由于 MQL 的核心是事件驱动,因此日志系统必须避免重复的相同条目充斥日志,而在 OnTick()、OnTimer() 或 OnChartEvent() 中放置 Log() 很容易发生这种情况。
从编码的角度来看 :
- 您的构造函数和 Initialize() 的基本部分代码是重复的。
- 您的 IsMessageSilent() 对 m_silent_keywords[] 中的每个单词都进行了循环检查,并在循环中将 "关键词 "转换为小写。在每个日志中都是如此!效率真的很低。
- 您的类几乎无法自定义,例如,如果我想自定义日志中的""文件名:" +__FILE__+ "\n",我就必须修改你的代码,或者派生出一个类并完全重写 Log() 方法。对于所需的自定义更改,例如使用 BIN 文件,也存在同样的问题。
- 您定义的 Print() 宏将覆盖 MQL 内置宏。强迫你的库用户在日志中使用 Print() 是一个非常糟糕的主意。
结论 :
你的库是一个正确的基本日志库。它可以为一些初学者或没有时间自己创建的程序员提供方便,为他们提供一些易于使用的日志功能。
无论如何,使用 "最佳 "这个限定词是有道理的。它的功能是正确的,但也是基本的,其实现也只是业余水平。
结论 :
你的库是一个正确的基本日志库。它可以为一些初学者或没有时间自己创建的程序员提供方便,为他们提供一些易于使用的日志功能。
无论如何,使用 "最佳 "这个限定词是有道理的。它的功能是正确的,但也是基本的,其实现也只是业余水平。
我意识到,与您的期望相比,"最佳 "可能有些言过其实。我的目的是分享任何人都能轻松修改和理解的代码。不过,我希望我已经为社区做出了一点贡献,而且大家都可以使用这个类。
再次感谢您的反馈。
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.
我认为您必须使用 MACROS 而不是类方法,才能发出文件名、函数签名和发生日志调用的行号。
结论 :
你的库是一个正确的基本日志库。它可以为一些初学者或没有时间自己创建的程序员提供方便,为他们提供一些易于使用的日志功能。
无论如何,使用 "最佳 "这个限定词是有道理的。它的功能是正确的,但也是基本的,其实现也只是业余水平。
至于单个单词的静音功能,我认为有效的方法是简单地写 "start",包括空格或其他字符。归根结底,与其他语言一样,如果在 Init .NET Framework 中配置日志,就会很有意义。如前所述,它需要简单,以便每个人都能轻松采用。如果您认为还需要添加其他内容,请随时写下来,我有空时会尝试添加代码。关于 "打印 "功能,大家可以根据自己的意愿将其注释出来。
如果有任何进一步的修改,我可以随时提供!
感谢您的回复。我目前正在使用您的 MQL Plus 增强调试支持库来打印日志。但是,有时它会打印大量重复的日志,目前我还没有解决这个问题的方法。你建议的解决方案是一种方法,我有空时会试试。这需要对日志系统进行精心设计。
Logging Class for both MQL4 and MQL5:
CDebugLogger 类是一种灵活而全面的日志工具,专为在 MQL4/5 环境中使用而设计。它允许开发人员记录不同重要程度的消息(INFO、WARNING、ERROR、DEBUG),并可在日志条目中加入时间戳、函数签名、文件名和行号等选项。该类支持将日志记录到控制台和文件中,并能将日志保存到常用文件夹和 CSV 格式。此外,它还提供基于特定关键字的日志静默功能,确保敏感信息不会被记录。该类是希望在其 MQL4/5 应用程序中实施强大日志机制的开发人员的理想选择,其可定制的功能可满足广泛的调试和监控需求。
Author: VitalDefender Inc.