欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

MetaTrader 5 的最简单记录器类 - MetaTrader 5 库

author emer | 823 人阅读 | 0 人评论 |

Simplest Logger class for MetaTrader 5 - library for MetaTrader 5

Simplest Logger class for MetaTrader 5 - library for MetaTrader 5

每个程序员都有自己的记录器。受 Python 日志记录模块的启发,我为 MQL5 编写了自己的代码。

这门课最简单。没有层次结构、旋转器或格式化程序。对于任何项目来说,它都是简单且方便的。

#包括 

乌萨格e

CDKLogger记录器;// 步骤 1. 使用“MyLoggerName”名称和 INFO 级别初始化 Logger记录器.Init(“我的记录器名称”,信息);// 您可以将默认记录器格式“%name%:[%level%] %message%”更改为您自己的
// 使用任意模式组合记录器.Format =“%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%”;// 步骤 2. 如果您想仅使用子句来过滤消息,
//         填充 FilterInList
// 2.1.将 substings 添加到 FilterIntListlogger.FilterInList.Add(“包括子字符串#1”);        
logger.FilterInList.Add(“包括子字符串#2”);        // 2.2.用“;”分割字符串分隔符将所有子字符串添加到 FilterInList 中一行logger.FilterInFromStringWithSep(“包括-子字符串-#3;包括-子字符串-#4”,“;”);  // 步骤 3. 如果您想用子字符串过滤 OUT 消息,但保留所有其他消息,
//         填充 FilterOutList
// 3.1.将子字符串添加到 FilterOutListlogger.FilterOutList.Add(“排除-子字符串-#1”);        
logger.FilterOutList.Add(“排除-子字符串-#2”);        // 3.2.用“;”分割字符串分隔符将所有子字符串添加到 FilterOutList 中一行logger.FilterOutFromStringWithSep(“排除-子字符串-#3;排除-子字符串-#4”,“;”);  // 使用 Filter 输入你的过滤器 str sep by ;这里

// 步骤 4. 记录记录器.调试(“调试:包括子字符串#1”,错误的);                  // 没有警报的情况下调试记录器.信息(“信息:包括子字符串#1”,真的);                    // 带有警报对话框的信息记录器.警告(“警告:包括子字符串#1”); 
记录器.错误(“错误:包括子字符串#1:排除子字符串#1”);// 由于 FilterOutList 被跳过记录器.Critical(“严重:包括子字符串#1”);

记录器.断言(真的, 
              “如果为真则记录消息”, 信息,  // 如果可以的话              “如果错误则记录消息”, 错误,// 如果失败              真的);                    // 也显示警报记录器.断言(真的, 
              “真假相同的信息”, 
              信息,  // 如果正常则记录级别              错误,  // 如果失败则记录级别              错误的);// 无警报  

执行结果将在日志中输出以下消息:

Simplest Logger class for MetaTrader 5 - library for MetaTrader 5

我经常这样使用类:

记录器.调试(字符串格式“%s/%d:我的消息:PARAM1=%f”,
                          __功能__,__线__,
                          我的_参数));

但这里我们有一个问题。 StringFormat 函数每次都会解析字符串,即使日志记录级别不要求输出消息。

如果您需要大量输出调试消息,则必须将输出包装在一个条件中:

如果(调试 >= 记录器.级别)                          
  记录器.调试(字符串格式“%s/%d:我的消息:PARAM1=%f”,
                            __功能__,__线__,
                            我的_参数));      

最好的方法是懒惰地使用 StringFormat,但不幸的是 MQL5 不支持传递动态数量的函数参数调试、信息、错误等功能。

如果您对如何做到这一点有任何想法,我很想听听。


附件下载

📎 cdklogger.mqh (26.27 KB)

📎 cdklogger_example.mq5 (5.73 KB)

Source: MQL5 #52741

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录