Обсуждение статьи "Искусство работы с логами (Часть 8): Самопереводящиеся записи об ошибках"

 

Опубликована статья Искусство работы с логами (Часть 8): Самопереводящиеся записи об ошибках:

В этой восьмой части серии «Мастерство работы с логами» мы исследуем реализацию многоязычных сообщений об ошибках в Logify — мощной библиотеке логирования для MQL5. Вы узнаете, как структурировать ошибки с контекстом, переводить сообщения на несколько языков и динамически форматировать логи по уровням серьезности. И всё это — с чистым, расширяемым и готовым к продакшену дизайном.

На данном этапе нашего пути уже ни для кого не секрет, что ведение логов — это не просто запись событий. Это возможность точно уловить то, что ваш советник пытается вам сказать в самом центре вихря тиков, решений и неопределенностей, из которых состоит алгоритмическая торговля.

В процессе повседневного использования 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.