Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедура для создания Debug LOG'a, Нужно вывести в ЛОГ файл все процессы. 
:(
    Опции темы
OppressiveTrace
Дата 4.7.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.1.2007

Репутация: нет
Всего: нет



Привет всем ГУРУ  smile !

Вчера появилась необходимость в процедуре вывода в текстовик всех, значений переменных и последовательности исполнения процессов (Функций, процедур, изменения значений переменных) происходящих в приложении в момент его исполнения. Решил написать Функцию которая могла-бы реализовать поставленную задачу и упорядочить выводимый в файл текст ввиде вложенности следующего вида :

Содержание ЛОГА :

Код

<<< LOG BEGIN 03.07.2007 at 14:37:23 >>>

[14:37:23.976] < Процедура 1> (название) : BEGIN
                [14:37:23.976] < Процесс 1 > : (Название) : Значение 1 уровеня вложенности : 2 уровеня вложенности : ...n уровеня вложенности 
                [14:37:23.976] < Процесс 2 > : (Название) : Значение 1 уровеня вложенности : 2 уровеня вложенности : ...n уровеня вложенности
                [14:37:23.976] < Процесс n.. > : (Название) : Значение 1 уровеня вложенности : 2 уровеня вложенности : ...n уровеня вложенности 
                [14:37:23.986] <Task> : Check if AlreadyRun
                [14:37:23.986] <Task> : Check if BackupStartService
                [14:37:23.986] <Task> : Check if not AlreadyRun
                [14:37:23.986] <Task> : if not AlreadyRun : Application.Title := 'Title';
                [14:37:23.986] <Task> : if not AlreadyRun : Application.HelpFile := 'App.hlp';
                [14:37:23.986] <Task> : if not AlreadyRun : Application.Initialize;
                [14:37:23.986] <Task> : if not AlreadyRun : Check if DataFilesExists
                [14:37:23.996] <Task> : if not AlreadyRun : if DataFilesExists : RunningAsService:=false;
                [14:37:24.006] <Task> : if not AlreadyRun : if DataFilesExists : Application.CreateForm(TMainForm, MainForm);
                [14:37:24.177] <Task> : if not AlreadyRun : if DataFilesExists : Check if DataFilesInvalid
[14:37:51.306] < Процедура 1> (название) : END

>>> LOG END 03.07.2007 at 14:37:51 <<<


И этот список продлить для всех событий внутри приложения.

Пришла в голову идея, написать следующее, но потом понял, что это совсем не лучший вариант по ряду причин который Вы сами поймёте, да и процедуру придётся тыкать после каждой строчки..  :(  smile 

Код

function CreateLogFile(LogStatus : Integer; LogFilePath : String; TaskName : String; ProcessList : TStringList) : Boolean;
var
   LOGFile : TextFile;
   LogFileName          : String;
   ErrorTypeMessageStr  : String;
   TimeStamp, ProcTimeStamp, DateStamp  : String;
   LogHeaderLine, LogFooterLine : String;
   TaskLine, ProcessLine : String;
   i : Integer;
begin
     try
        try
           LOGFileName := 'LogFileTest';
           AssignFile(LOGFile, LogFilePath + LOGFileName + '.txt');
           //FileMode := fmOpenRead;
           if not FileExists(LogFilePath + LOGFileName + '.txt') then
             begin
                  Rewrite(LOGFile);
             end
                else Append(LOGFile);

           TimeStamp       := FormatDateTime('hh:mm:ss', TDateTime(now));
           ProcTimeStamp   := FormatDateTime('hh:mm:ss.zzz', TDateTime(now));
           DateStamp       := FormatDateTime('dd/mm/yyy', TDateTime(now));
           LogHeaderLine   := Format('<<< %s at %s >>>', [ DateStamp , TimeStamp]);
           LogFooterLine   := Format('>>> %s at %s <<<', [ DateStamp , TimeStamp]);
           TaskLine        := Format('   [%s] <<< Task >>> : %s', [ProcTimeStamp, TaskName]);

           if LogStatus = StartLog then
             begin
                  WriteLn(LOGFile, LogHeaderLine);
                  WriteLn(LOGFile, '');
                  WriteLn(LOGFile, TaskLine);
                  WriteLn(LOGFile, '');
                  for i := 0 to ProcessList.Count -1 do
                     begin
                          TimeStamp   := FormatDateTime('hh:mm:ss.zzz', TDateTime(now));
                          ProcessLine := Format('        [%s] Process : %s', [TimeStamp, ProcessList.Strings[i]]);
                          WriteLn(LOGFile, ProcessLine);
                     end;
                  WriteLn(LOGFile, '');
             end
                else
                    if LogStatus = ContinueLog then
                      begin
                           WriteLn(LOGFile, TaskLine);
                           WriteLn(LOGFile, '');
                           for i := 0 to ProcessList.Count -1 do
                              begin
                                   TimeStamp   := FormatDateTime('hh:mm:ss.zzz', TDateTime(now));
                                   ProcessLine := Format('        [%s] Process : %s', [TimeStamp, ProcessList.Strings[i]]);
                                   WriteLn(LOGFile, ProcessLine);
                              end;
                           WriteLn(LOGFile, '');
                      end
                         else
                             if LogStatus = EndLog then
                               begin
                                    WriteLn(LOGFile, TaskLine);
                                    WriteLn(LOGFile, '');
                                    for i := 0 to ProcessList.Count -1 do
                                       begin
                                            TimeStamp   := FormatDateTime('hh:mm:ss.zzz', TDateTime(now));
                                            ProcessLine := Format('        [%s] Process : %s', [TimeStamp, ProcessList.Strings[i]]);
                                            WriteLn(LOGFile, ProcessLine);
                                       end;
                                    WriteLn(LOGFile, '');
                                    WriteLn(LOGFile, LogFooterLine);
                                    WriteLn(LOGFile, '');
                               end;

          // WriteLn(LOGFile, '');
          // if LogStatus = EndLog then WriteLn(LOGFile, LogFooterLine);
         //  WriteLn(LOGFile, '');
       
        finally
                CloseFile(LOGFile);
        end;
     except
           on IO : EInOutError do
             begin
             Case IO.ErrorCode of
             2 : ErrorTypeMessageStr := 'Файл ' + LogFilePath + LOGFileName + '.txt' + ' не найден';
             3 : ErrorTypeMessageStr := 'название ' + LogFilePath + LOGFileName + '.txt' + ' не правильное';
             4 : ErrorTypeMessageStr := 'Слишком много открытых файлов';
             5 : ErrorTypeMessageStr := 'Нет доступа к файлу ' + LogFilePath + LOGFileName + '.txt';
             100 : ErrorTypeMessageStr := 'Конец файла ' + LogFilePath + LOGFileName + '.txt';
             101 : ErrorTypeMessageStr := 'Переполнение диска, при работе с файлом ' + LogFilePath + LOGFileName + '.txt';
             106 : ErrorTypeMessageStr := 'При работе с файлом ' + LogFilePath + LOGFileName + '.txt' + ', обнаружена ошибка ввода';
             end;
           if ErrorTypeMessageStr = '' then ErrorTypeMessageStr := 'При работе с файлом ' + LogFilePath + LOGFileName + '.txt' + ' обнаружена неизвесная ошибка';
           ShowMessage(ErrorTypeMessageStr + ' ' + IntToStr(IO.ErrorCode));
           Application.MessageBox(PChar(ErrorTypeMessageStr), PChar(Application.Title + 'Внимание, обнаружена ошибка') , MB_OK);    
     end;
 end;
end; 


У кого есть идеи, как всё это реализовать, очень прошу откликнуться ???  smile 
Заранее спасибо !!!
PM MAIL   Вверх
OppressiveTrace
Дата 4.7.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.1.2007

Репутация: нет
Всего: нет



Ну, неужели никто не знает ?  smile  smile 
PM MAIL   Вверх
MetalFan
Дата 5.7.2007, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



а зачем такой лог? странно это все


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.