Как получить информацию о логах терминала МТ4, пока он их ещё не записал в файл на диск?

 
Проблема следующая.
Терминал МТ4 производит запись логов, которые видны на вкладках "Experts" и "Journal" только при выходе из программы, либо при смене текущей даты.
То есть те логи, которые видны прямо сейчас в терминале, находятся лишь только в оперативной памяти и отсутствуют в файлах логов на диске.
Есть потребность прочитать текущие логи терминала из обоих вкладок программным способом (Экспертом или внешними программами) для организации автоматического мониторинга работы терминала.
Ну то есть общая цель состоит в том, чтобы не самому регулярно смотреть в текущие логи терминала, а получать информацию о работе эксперта в терминале посредством программных средств, которые будут проводить анализ логов и выдавать заключение о текущем статусе (OK/Alarm) и посылать сообщение о статусе на почту.
Для этого необходимо как-то эти самые логи терминала читать. В файлах логирования информация записывается с огромной задержкой (раз в сутки при смене даты).
 
solandr:
Проблема следующая.
Терминал МТ4 производит запись логов, которые видны на вкладках "Experts" и "Journal" только при выходе из программы, либо при смене текущей даты.
То есть те логи, которые видны прямо сейчас в терминале, находятся лишь только в оперативной памяти и отсутствуют в файлах логов на диске.
Есть потребность прочитать текущие логи терминала из обоих вкладок программным способом (Экспертом или внешними программами) для организации автоматического мониторинга работы терминала.
Ну то есть общая цель состоит в том, чтобы не самому регулярно смотреть в текущие логи терминала, а получать информацию о работе эксперта в терминале посредством программных средств, которые будут проводить анализ логов и выдавать заключение о текущем статусе (OK/Alarm) и посылать сообщение о статусе на почту.

Для этого необходимо как-то эти самые логи терминала читать. В файлах логирования информация записывается с огромной задержкой (раз в сутки при смене даты).

Логи можно читать только посредством WinAPI: обращение к элементу управления ListView. Но это тоже не очень хороший вариант, т. к.:

1. Не все записи попадают в логи на закладке (в файл пишется все).

2. Зависит от того, как реализован этот элемент управления в конкретном билде терминала (в другом может быть что-то изменено).

Таким образом, искать решение проблемы нужно в какой-то другой плоскости. Читать логи - плохая идея.

 
Scriptong:

Логи можно читать только посредством WinAPI: обращение к элементу управления ListView. Но это тоже не очень хороший вариант, т. к.:

1. Не все записи попадают в логи на закладке (в файл пишется все).

2. Зависит от того, как реализован этот элемент управления в конкретном билде терминала (в другом может быть что-то изменено).

Таким образом, искать решение проблемы нужно в какой-то другой плоскости. Читать логи - плохая идея.

Мне требуется читать только те логи, которые отображаются во вкладках.

Есть ли где-то примеры как это делается с помощью API (ListView)? Думаю, что при наличии какого-то рабочего примера чтения с остальной разработкой разберусь самостоятельно.

Чтение логов - это то, что я ежедневно глазками делаю. Когда счетов с пару десятков - это занимает до 10 минут времени ежедневно. И если бы я смог собрать последние несколько строк логов из каждого терминала в одном текстовом файле, то это время могло бы сократиться раз в 10 минимум, так как при нормальной работе на всех терминалах логи выглядят примерно одинаково. И только в случае каких-либо проблем логи на каком-то терминале будут выбиваться из общей толпы.

 
solandr:
 

...

Чтение логов - это то, что я ежедневно глазками делаю. Когда счетов с пару десятков - это занимает до 10 минут времени ежедневно. И если бы я смог собрать последние несколько строк логов из каждого терминала в одном текстовом файле, то это время могло бы сократиться раз в 10 минимум, так как при нормальной работе на всех терминалах логи выглядят примерно одинаково. И только в случае каких-либо проблем логи на каком-то терминале будут выбиваться из общей толпы.

А не пробовали написать bat файл, который сначала нарастит дату на сутки (утилитой date), подождет секунд 5, чтобы логи сбросились на диск, соберет из них последние N строк в один файл, затем вернет дату назад?

Если сброс логов на диск делается при изменении даты, должно сработать. Если нужно еще и время подходящее, есть утилита time. Если терминалам не понравится время последней модификации лог-файлов, есть утилита touch.exe происхождением из Unix.

 
Vlad143:

А не пробовали написать bat файл, который сначала нарастит дату на сутки (утилитой date), подождет секунд 5, чтобы логи сбросились на диск, соберет из них последние N строк в один файл, затем вернет дату назад?

Если сброс логов на диск делается при изменении даты, должно сработать. Если терминалам не понравится время последней модификации лог-файлов, есть утилита touch.exe происхождением из Unix.

Есть проверенный способ. Объем буфера вывода конечен. Забиваем всякой хренью лог, пока он не разродится.

Это все не правильно.

Правильно - поставить задачу. А, написать средствами MQL программу, собирающую интересующую информацию, нет проблем.

 
Vlad143:

А не пробовали написать bat файл, который сначала нарастит дату на сутки (утилитой date), подождет секунд 5, чтобы логи сбросились на диск, соберет из них последние N строк в один файл, затем вернет дату назад?

Если сброс логов на диск делается при изменении даты, должно сработать. Если нужно еще и время подходящее, есть утилита time. Если терминалам не понравится время последней модификации лог-файлов, есть утилита touch.exe происхождением из Unix.

Весьма оригинальное и хитроумное решение! Надо бы подумать над этим.

Конечно же самым простым была бы реализация возможности задавать в самом терминале МТ4 частоту сброса логов в файл. Либо через сам интерфейс терминала, либо ещё лучше программно - через вызов какой-нибудь функции языка MQL4. Но тут уже помощь разработчиков требуется. Но их ответ уже заранее известен. Им же конечно лучше знать чего требуется от их продукта пользователям, чем самим пользователям?

 
Проверил. Но к сожалению смена даты на компе вручную никак не влияет на сброс логов в файл.
 
Vlad143:

А не пробовали написать bat файл, который сначала нарастит дату на сутки (утилитой date), подождет секунд 5, чтобы логи сбросились на диск, соберет из них последние N строк в один файл, затем вернет дату назад?

Если сброс логов на диск делается при изменении даты, должно сработать. Если нужно еще и время подходящее, есть утилита time. Если терминалам не понравится время последней модификации лог-файлов, есть утилита touch.exe происхождением из Unix.

Надо просто научиться читать чужой не закрытый файл. Делов-то... 
 
tara:
Надо просто научиться читать чужой не закрытый файл. Делов-то... 
Что это даст? В том незакрытом файле просто ещё нет последних строчек логов, которые видны в терминале.
 
Mislaid:

Есть проверенный способ. Объем буфера вывода конечен. Забиваем всякой хренью лог, пока он не разродится.

Это все не правильно.

Правильно - поставить задачу. А, написать средствами MQL программу, собирающую интересующую информацию, нет проблем.

Чистым MQL получить данные из логов точно не выйдет - ограничения на песочницу. Только WinAPI. Другое дело, что вполне возможно обойтись и без анализа логов. Об этом я и говорил выше, когда советовал подходить к задаче с другой стороны. Что там за информация такая в этих логах, которую нельзя получить другими путями?
 
solandr:

Есть ли где-то примеры как это делается с помощью API (ListView)? Думаю, что при наличии какого-то рабочего примера чтения с остальной разработкой разберусь самостоятельно.

Их куча, на то и есть гугл. К примеру, вот так работают с получением ярлыков рабочего стола. А рабочий стол - это как раз ListView.
Причина обращения: