请观看如何免费下载自动交易
请在Telegram上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
134
等级:
(7)
已发布:
Logging.mq5 (9.08 KB) 预览
\MQL5\Include\
Logging.mqh (44.87 KB) 预览
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

CDebugLogger 类:适用于 MQL4/5 的综合日志工具

CDebugLogger 类是专为 MQL4/5 环境设计的强大而灵活的日志工具。对于需要精确监控、调试和跟踪应用程序行为的开发人员来说,它是必不可少的工具。下面,我们将探讨该类的主要特性和功能。

主要特点

  • 多日志级别: CDebugLogger 类支持不同重要程度的日志记录,包括INFOWARNINGERRORDEBUG。这样,开发人员就可以过滤并关注具有特殊重要性的消息。
  • 包含时间戳: 开发人员可以选择在日志信息中包含时间戳,并可自定义格式。这一功能对于跟踪事件发生的确切时间和调试时间敏感性问题至关重要。
  • 文件日志: 该类为日志记录到文件提供了强大的支持。开发人员可以启用或禁用文件日志记录功能,指定日志文件的路径,并选择是否将日志保存在常用文件夹中。此外,日志还能以 CSV 格式保存,便于解析和分析。
  • 上下文信息: 为了提高日志信息的清晰度,CDebugLogger 类允许包含函数签名、文件名和行号。这些上下文信息有助于准确定位代码中的问题。
  • 无声关键字: 该类的一个独特功能是能对包含特定关键字的日志进行静默处理。这对防止敏感信息(如密码或机密数据)被记录特别有用。
  • 过滤关键字: 该类 的另一个独特功能 过滤包含特定关键字的日志。这 调试特别有用,因为它可以只关注与特定问题相关的日志。开发人员可以缩小日志输出的范围,只包含包含特定术语的信息,从而更容易识别 解决与这些术语相关的问题,而不会被无关的日志条目淹没。

使用示例

下面是一个如何初始化和使用 CDebugLogger 类的示例:

// 初始化日志记录器,将 INFO 级别的日志记录到文件中
CDebugLogger logger(INFO, true, "log.txt", true, TIME_DATE | TIME_MINUTES, false, true, true, true);

// 记录一条简单的信息
logger.Log(INFO, "This is an info message");

// 关闭一个关键字
logger.AddSilentKeyword("password");

// 记录将被静音的信息
logger.Log(INFO, "User entered password: 1234");

// 启用文件日志记录
logger.EnableFileLogging(true, "debug.log", false);

// 删除沉默的关键词
logger.RemoveSilentKeyword("password");

// 从静默列表中删除关键字后记录一条信息
logger.Log(INFO, "User entered password: 1234");

// 添加关键字以过滤日志
logger.AddFilterKeyword("success");

// 记录将被过滤掉的信息
logger.Log(INFO, "Operation failed");

// 记录可通过过滤器的信息
logger.Log(INFO, "Operation successful");

// 从过滤器中删除一个关键词
logger.RemoveFilterKeyword("success");

// 使用通用日志函数进行初始化
logging.Initialize(WARNING, true, "warnings.log", true, TIME_SECONDS, true, false, true, true);

// 使用通用日志函数记录警告
Log(WARNING, "This is a warning message");

脚本示例

要在脚本中使用 CDebugLogger 类,只需在文件开头包含必要的库即可,如下所示:

//--- 重要的是要在所有其他头文件之前包含该头文件
#include <Logging.mqh>  


//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
{
   //--- 以 INFO 级别初始化日志记录器,将日志记录到文件中
   //--- 包括时间戳并以 CSV 格式保存
   int log_options = 0; // filename | line | funcsig;
   logging.Initialize(INFO, true, "example_log.txt", true, TIME_DATE | TIME_MINUTES | TIME_SECONDS, false, log_options, true);

   //--- 记录一条简单的信息
   Log(INFO, "Script started successfully.");

   //--- 记录警告信息
   Log(WARNING, "This is a warning message.");

   //--- 记录错误信息
   Log(ERROR, "This is an error message.");

   //--- 记录调试信息
   Log(DEBUG, "This is a debug message for debugging purposes.");

   //--- 添加一个关键字,使包含 "密码 "的日志保持沉默
   logging.AddSilentKeyword("password");

   //--- 尝试记录包含消音关键字的信息
   Log(INFO, "User entered password: 12348"); // 此信息将被静音

   //--- 删除沉默关键字
   logging.RemoveSilentKeyword("password");

   //--- 再次记录信息,现在它将被记录下来
   Log(INFO, "User entered password: 1234");

   //--- 使用通用日志函数记录信息
   Log(INFO, "This message is logged using the generic Log function.");

   //--- 使用打印宏记录 INFO 级别的信息
   Print("This message is logged using the Print macro.");

   //--- 演示使用不同的选项组合进行日志记录
   logging.Initialize(INFO, true, "log_with_options.txt", true, TIME_DATE | TIME_MINUTES, false, FILENAME | LINE, true);
   Log(INFO, "This log includes only the file name and line number.");

   logging.Initialize(INFO, true, "log_with_funcsig.txt", true, TIME_DATE | TIME_MINUTES | TIME_SECONDS, false, FUNCSIG, true);
   Log(INFO, "This log includes only the function signature.");

   logging.Initialize(INFO, true, "log_custom_order.txt", true, TIME_MINUTES, false, LINE | FILENAME | FUNCSIG, true);
   Log(INFO, "This log includes line number, file name, and function signature in a custom order.");

   //--- 添加关键字以过滤包含 "重要 "的日志
   logging.AddFilterKeyword("important");

   //-- 记录一些信息以演示过滤器
   Log(INFO, "This is an important message."); // 将显示该信息
   Log(INFO, "This is a regular message.");    // 此信息将不可见

   //--- 删除过滤关键字以显示所有日志
   logging.RemoveFilterKeyword("important");

   //--- 记录一条表明脚本结束的最终信息
   Log(INFO, "Script execution completed.");
}

输出 CSV 示例:

Timestamp,Level,Message
"2024.09.01 18:31:44","INFO","Script started successfully."
"2024.09.01 18:31:44","WARNING","This is a warning message."
"2024.09.01 18:31:44","ERROR","This is an error message."
"2024.09.01 18:31:44","DEBUG","This is a debug message for debugging purposes."
"2024.09.01 18:31:44","INFO","User entered password: 1234"
"2024.09.01 18:31:44","INFO","This message is logged using the generic Log function."
"2024.09.01 18:31:44","INFO","This message is logged using the Print macro."
Timestamp,Level,Message,Filename,Line
"2024.09.01 18:31","INFO","This log includes only the file name and line number.","Logging.mq5","135"
Timestamp,Level,Message,Funcsig
"2024.09.01 18:31:44","INFO","This log includes only the function signature.","void OnStart()"
Timestamp,Level,Message,Filename,Line,Funcsig
"18:31","INFO","This log includes line number, file name, and function signature in a custom order.","Logging.mq5","141","void OnStart()"
"18:31","INFO","This is an important message.","Logging.mq5","147","void OnStart()"
"18:31","INFO","Script execution completed.","Logging.mq5","154","void OnStart()"

结论

对于任何 MQL4/5 开发人员来说,CDebugLogger 类都是不可多得的工具。该类具有广泛的可定制功能,能精确记录和监控应用程序,便于调试和更好地跟踪应用程序性能。无论您需要简单的消息记录还是详细的上下文信息,CDebugLogger 类都能根据您的开发需求提供可靠、高效的解决方案。

欲了解有关 CDebugLogger 类的更多信息或探索其他高级工具和解决方案,请访问StormWave Technologies

由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/51817

Max trade volume checker for your trading account Max trade volume checker for your trading account

显示不同类型订单(买入、卖出、挂单买入和挂单卖出)允许的标的资产最大手数的对话框。

HedgeCover EA HedgeCover EA

智能头寸保护,每个头寸一个对冲逻辑。具有魔数分离、冷却计时器和最大对冲限制功能。防止无限对冲循环。免费 MIT 许可。

HiLo HiLo

高低线指示器

Save OHLCV Data from Chart to CSV File Save OHLCV Data from Chart to CSV File

该脚本会将图表上的所有 OHLCV 数据保存到 CSV 文件中。