Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

как лучше огранизовать лог программы   Найти похожие ветки 

 
tippa   (2010-03-19 09:34) [0]

Вообщем написал програмку, и вот хочу потестировать пару суток. Думаю сделать ведение лога, где-то 1строка в секунду. Как это лучше сделать?  Постоянно хранить весь лог в строке и каждую секунду сбрасывать его на диск или дописывать строки через FileWrite?


 
И. Павел ©   (2010-03-19 09:38) [1]

Вот, к примеру, можно так: http://www.excode.ru/art5124p6.html

PS: Хотя с таким периодом (1 строка в секунду), наверное, можно как угодно - все равно серьезной потери производительности/памяти не будет.


 
Дмитрий Белькевич   (2010-03-19 11:57) [2]

Одна строка в секунду - это на современном железе ничто. Делай простую запись в файл.


 
KSergey ©   (2010-03-19 11:57) [3]

> И. Павел ©   (19.03.10 09:38) [1]

Странно, зачем автор этого кода пользуется TFileStream? Упражнялся?
Ведь обычный WriteLn ничуть не хуже по функциональности, а писанины - на порядок меньше.

С лог-файлами беды две:

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

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

Типа так, например

LogFile:Integer;

LogFile := CreateFile("file.log", GENERIC_WRITE, FILE_SHARE_READ OR FILE_SHARE_WRITE, nil, OPEN_ALWAYS, 0, 0);

...................

procedure WriteDebugInfo(const s:String);
const
    LOG_LINE_END = #13#10;
    LOG_DATETIME_FORMAT = "dd.mm.yyyy hh:nn:ss.zzz; ";
    LOG_BUF_STR_GROW_SIZE = 1024;
    log_buf_str: String = "";
var
    datetime_str: String;
    real_len, requerd_len, new_len: Integer;
    fwritten:DWORD;
begin
       try
           DateTimeToString(datetime_str, LOG_DATETIME_FORMAT, now());

           real_len := Length(datetime_str) + Length(s) + Length(LOG_LINE_END);
           requerd_len := real_len + 2; // #0

           if Length(log_buf_str) < requerd_len then
             begin
               new_len := ((requerd_len div LOG_BUF_STR_GROW_SIZE)+1) * LOG_BUF_STR_GROW_SIZE;
               SetLength(log_buf_str, new_len);
             end;

           StrPCopy(PChar(log_buf_str), datetime_str);
           StrPCopy(PChar(log_buf_str)+Length(datetime_str), s);
           StrPCopy(PChar(log_buf_str)+Length(datetime_str)+Length(s), LOG_LINE_END);

           SetFilePointer(LogFile,0,nil,FILE_END);
           WriteFile(LogFile, log_buf_str[1], real_len, fwritten , nil);
       except
       end;

end;


 
Юрий Зотов ©   (2010-03-19 16:11) [4]

> KSergey ©   (19.03.10 11:57) [3]

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


Либо простым вызовом Flush. И тогда получим то самое:

> Ведь обычный WriteLn ничуть не хуже по функциональности,
> а писанины - на порядок меньше.


:o)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.067 c
2-1274530341
Delphist2
2010-05-22 16:12
2010.08.27
method insert класса range завершен неверно


2-1274677239
viktooor
2010-05-24 09:00
2010.08.27
Поис в диапазоне дат


15-1267798757
Jeer
2010-03-05 17:19
2010.08.27
Любимым и дорогим Женщинам.


6-1216680107
flaxe
2008-07-22 02:41
2010.08.27
Winsock HTTP Auth.


15-1275547795
Sergey Masloff
2010-06-03 10:49
2010.08.27
Электронные книжки - что купить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский