文章 "精通日志记录(第八部分):具备自动翻译能力的错误日志记录"

 

新文章 精通日志记录(第八部分):具备自动翻译能力的错误日志记录已发布:

在《精通日志记录》第八部分中,我们将探索如何在Logify(一款功能强大的MQL5日志库)中实现多语言报错提示。您将学习如何根据上下文结构化报错信息、将提示内容切换成多种语言,并根据日志重要级别进行自动动态格式化。所有这一切都基于一个简洁、可扩展且适用于生产环境的设计。

经过前几期的讲解,想必您已深知日志记录绝非简单的事件流水账。在算法交易的日常操作中,K线跳动、策略决策与市场不确定性交织成一张复杂的网,日志的真正价值是精准记录EA程序的"真实意图"。

在日常使用Logify时,我发现一个亟待解决的问题:错误处理机制仍然停留在表层。即使拥有完善的日志格式结构,最终输出的日志内容仍只能显示原始错误代码,无法直观体现背后的真实含义。比如以下这段日志:

logify.Error("Failed to send sell order", "Order Management", "Code: "+IntegerToString(GetLastError()));
// Console:
// 2025.06.06 10:30:00 [ERROR]: (Order Management) Failed to send sell order | Code: 10016

结果呢?一句模棱两可的提示。我们能知道报错发生在哪个模块,但无法得知失败的具体原因。试问,谁不曾为了查阅文档而翻阅那几十个晦涩难懂的 MQL5 错误代码?我以前就常常面临这种困境:拿到错误代码后,还得打开文档慢慢搜索,才能搞清楚问题的真正起因。正是源于这种真实的痛点,我萌生了一个想法:如果 Logify 能帮我解读报错会怎样?它能不能不只给我一串数字代码,还自动生成清晰、贴合场景的错误解释,直接写入日志文件?


作者:joaopedrodev

 
您创建的两个库都非常出色,感谢您提供的代码。
 
谢谢,我很乐意提供帮助。如有任何改进建议,请与我联系!
 
joaopedrodev #:
谢谢,我很乐意提供帮助。如有任何改进建议,请与我联系!
如果日志记录非常频繁,但我又想避免重复打印,该怎么办?例如,检测到交易开仓信号,但价差过大且持续数十秒--如果使用日志记录,至少会打印数十次甚至数百次。如何解决这种情况?我知道一种解决方案是使用变量确保日志只显示一次,但如果日志库本身能处理这个问题就更好了。您能提供一些建议吗?
 

我编译了日志库 Logify,在 MT5 build 5100 之后,出现了几个与 CLogifyHandlerDatabase::Query 中的 类型有关的编译错误。我相信您应该已经解决了这个问题。
 
感谢您的建议,我将在今后的文章中讨论这些建议。
 
joaopedrodev #:
感谢您的建议,我会在今后的文章中采纳这些建议。

关于语言的一个小想法。

或许可以将原始英文信息编排成这样一种方式,即可以很容易地将其复制并粘贴到翻译器(deepl.com 或 translate.google.com)中,然后将结果放回程序中。这样,任何人都可以轻松地用自己的语言设置程序。

Deeple 可识别 36 种语言,Google 甚至可识别约 130 种语言。