Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 172
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Класс CDebugLogger: Комплексная утилита протоколирования для MQL4/5
Класс CDebugLogger - это мощная и гибкая утилита протоколирования, специально разработанная для сред MQL4/5. Это незаменимый инструмент для разработчиков, которым необходимо точно контролировать, отлаживать и отслеживать поведение своих приложений. Ниже мы рассмотрим ключевые особенности и возможности этого класса.
Ключевые особенности
- Несколько уровней журнала: Класс CDebugLogger поддерживает ведение журнала на разных уровнях важности, включая INFO, WARNING, ERROR и DEBUG. Это позволяет разработчикам фильтровать и фокусироваться на сообщениях особой важности.
- Включение временных меток: Разработчики могут включать в сообщения журнала временные метки в настраиваемых форматах. Эта функция очень важна для отслеживания точного времени событий и отладки проблем, чувствительных к времени.
- Файловое протоколирование: Класс обеспечивает надежную поддержку записи логов в файлы. Разработчики могут включить или отключить ведение журнала в файлах, указать путь к файлу журнала и выбрать, сохранять ли журналы в общей папке. Кроме того, журналы могут быть сохранены в формате 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"); // Инициализация с помощью общей функции Log logging.Initialize(WARNING, true, "warnings.log", true, TIME_SECONDS, true, false, true, true); // Занесите предупреждение в журнал, используя общую функцию Log 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."); //--- Добавьте ключевое слово для блокировки журналов, содержащих 'password'. logging.AddSilentKeyword("password"); //--- Попытка зарегистрировать сообщение, содержащее ключевое слово silenced Log(INFO, "User entered password: 12348"); // Это сообщение будет заглушено //--- Удалите ключевое слово "молчание logging.RemoveSilentKeyword("password"); //--- Зафиксируйте сообщение еще раз, теперь оно будет занесено в журнал Log(INFO, "User entered password: 1234"); //--- Используйте общую функцию Log для регистрации сообщения Log(INFO, "This message is logged using the generic Log function."); //--- Используйте макрос Print для регистрации сообщения на уровне 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."); //--- Добавьте ключевое слово для фильтрации журналов, содержащих 'important' logging.AddFilterKeyword("important"); //--- Выведите несколько сообщений для демонстрации работы фильтра Log(INFO, "This is an important message."); // Это сообщение будет видно Log(INFO, "This is a regular message."); // Это сообщение не будет отображаться //--- Удалите ключевое слово filter, чтобы показать все журналы. 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()"
Заключение
Класс CDebugLogger - это бесценный инструмент для любого разработчика MQL4/5. Благодаря широкому набору настраиваемых функций он позволяет вести точный логгинг и мониторинг приложений, облегчая отладку и улучшая отслеживание производительности приложений. Нужна ли вам простая регистрация сообщений или подробная контекстная информация, класс CDebugLogger обеспечивает надежное и эффективное решение, соответствующее вашим потребностям в разработке.
Для получения дополнительной информации о классе CDebugLogger или для изучения других передовых инструментов и решений посетите сайт StormWave Technologies.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/51817
Max trade volume checker for your trading account
Диалоговое окно для отображения максимального размера лота, допустимого для базового актива, для различных типов ордеров (покупка, продажа, отложенная покупка и отложенная продажа).
HedgeCover EA
Интеллектуальная защита позиций с логикой "один хедж на одну позицию". Имеет функцию разделения магических чисел, таймер охлаждения и ограничение максимального хеджирования. Предотвращает бесконечные циклы хеджирования. Свободная лицензия MIT.
HiLo
Индикатор высокой и низкой линии
Save OHLCV Data from Chart to CSV File
Этот скрипт сохраняет все данные OHLCV, имеющиеся на графике, в CSV-файл.