SASGIS - SAS.Планета
View Issue Details
0003757SAS.Планета[All Projects] Хотелкаpublic03-04-2021 11:2509-04-2021 11:56
VadimK 
zed 
normalminorN/A
resolvedfixed 
201212 
211230211230 
0003757: PascalScript: Добавить возможность записи в лог (для отладки)
В программе присутствуют довольно скромные возможности по отладке паскаль-скриптов. Поэтому в рантайме основным способом отладки является запись скриптом отладочных сообщений в лог-файлы. Таких файлов может быть очень много (особенно учитывая отсутствие функции дописывания в файл). И логичнее и удобнее было бы распологать всех их в папке с кэшэм.

Но скрипту во время работы очень проблематично узнать, где располагается папка с кэшем соответствующего скрипту ZMP.

Во-первых, сама программа SASPlanet.exe может быть запущена из любой папки любого диска.

Во-вторых, скрипту не известен тип кэша и название папки кэша, которое прописано в params.txt (NameInCache=)

Кроме-того не стоит забывать, что операция записи файла сама по себе небезопасна. При определённом стечении обстоятельств можно случайно что-нибудь испортить.
Собственно предложение: добавить функцию записи файла в папку кэша:

function SaveToFileInCacheFolder(const Filename: AnsiString; const AData: AnsiString): LongInt;

Filename - это путь до файла ВНУТРИ папки кэша.

Например:
SaveToFileInCacheFolder('\debug.txt',VReaponseData);
или
SaveToFileInCacheFolder('debug.txt',VReaponseHeader);
или
SaveToFileInCacheFolder('/GarminSys/'+TileName,VReaponseData);

Здесь за корневую папку (\ или /) считается папка с кэшем. Первый слэш можно просто отбрасывать.
Кстати, заодно можно было бы добавить фунцию дописываеия файла:

function AppendToFileInCacheFolder(const Filename: AnsiString; const AData: AnsiString): LongInt;

Пример:

AppendToFileInCacheFolder('debug.txt',VReaponseHeader);
No tags attached.
Issue History
03-04-2021 11:25VadimKNew Issue
03-04-2021 14:22zedNote Added: 0020092
05-04-2021 05:28VadimKNote Added: 0020093
05-04-2021 08:25zedProduct Version.Nightly => 201212
05-04-2021 08:25zedSummaryдля скриптов: добавить функцию записи файла в папку кэша => PascalScript: Добавить возможность записи в лог (для отладки)
05-04-2021 08:31zedNote Added: 0020094
05-04-2021 08:32zedStatusnew => confirmed
05-04-2021 08:32zedTarget Version => 211230
05-04-2021 13:57zedNote Added: 0020095
05-04-2021 13:58zedNote Added: 0020096
05-04-2021 13:58zedAssigned To => zed
05-04-2021 13:58zedStatusconfirmed => feedback
09-04-2021 11:03VadimKNote Added: 0020107
09-04-2021 11:03VadimKStatusfeedback => assigned
09-04-2021 11:06VadimKNote Edited: 0020107bug_revision_view_page.php?bugnote_id=20107#r7748
09-04-2021 11:56zedNote Added: 0020108
09-04-2021 11:56zedStatusassigned => resolved
09-04-2021 11:56zedFixed in Version => 211230
09-04-2021 11:56zedResolutionopen => fixed

Notes
(0020092)
zed   
03-04-2021 14:22   
Делать, как вы описываете, нельзя по многим причинам. Но можно сделать интерфейс логера, который будет писать в папку logs в корневой папке программы. Имя логфайла давать по имени zmp.
(0020093)
VadimK   
05-04-2021 05:28   
Было бы здорово, если бы такой логгер появился! Ибо создавать отдельный лог-файл на каждую запись не очень удобно. :(
(0020094)
zed   
05-04-2021 08:31   
Судя по примерам использования, вы хотите записывать в лог заголовки и тело запроса, так вот, есть гораздо более удобный способ посмотреть эти данные в реальном времени - Fiddler.

В SAS на вкладке Интернет включить "Использовать системные настройки прокси", установить и запустить Fiddler - где вы сможете просматривать абсолютно все сетевые запросы SAS (и не только).
(0020095)
zed   
05-04-2021 13:57   
Добавил вот такой интерфейс:

  IPascalScriptLogger = interface
    procedure Write(const AStr: AnsiString);
    procedure WriteFmt(const AFormat: string; const AArgs: array of const);
  end;

внутри скрипта доступна переменная Logger с типом этого интерфейса.

Пример использования:

begin
  ResultURL = ...

  Logger.Write(ResultURL);
  Logger.WriteFmt('ScriptBuffer = %s', [ScriptBuffer]);
end;

Каждый вывод в лог форматируется следующим образом:

[%ThreadId%] %TimeStamp%: %Сообщение_из_скрипта%\r\n

Лог пишется в папку .\Logs\zmp\%имя_zmp%.log
(0020096)
zed   
05-04-2021 13:58   
Такого функционала достаточно?
(0020107)
VadimK   
09-04-2021 11:03   
(edited on: 09-04-2021 11:06)
Да, достаточно! Спасибо огромное!
Проверил на своём скрипте - всё работает.

На сайте бы обновить упомянуть об этой новой фишке. И других тоже. :)

(0020108)
zed   
09-04-2021 11:56   
Займитесь, в wiki может писать любой желающий.