Записать логи в файл
Добавлено: 07 фев 2005, 13:35
Есть ListBox куда записываются из разных точек типа логи. Выполняется прога - и пишет, пишет. Так отладка, визуализация. Но иногда требуется это записать в файл.
Написал:
procedure TForm1.ListBox1Add(S: string);
var nf: string;
begin
if ListBox1.Items.Count>1000 then
ListBox1.Items.Delete(ListBox1.Items.Count-1);
ListBox1.Items.Insert(0,DateTimeToStr(Now)+': '+S);
logcount:=logcount+1;
//записать в файл логов, проверив 1 на дату
if logcount mod 1000 =0 then
try
nf:=datetimetostr(Now)+'.log';
while (pos(':',nf)>0) do
nf[pos(':',nf)]:='_';
nf:=Form2.DirectoryEdit1.Text+'/'+nf;
listbox1.Items.SaveToFile(nf);
except
showmessage(inttostr(logcount)+' Херово!!!');
end;
end;
Вроде все работает. Но когда пришлось вставить нагрузочное тестирование, оказалось, что в блоке записи в файл - что-то происходит. Доходило до того, что прога просто из памяти вываливалась.
Чую, что это из-за того, что либо 2 процесса одновременно пытаются в файл писать, либо пишется в файл строка бокса, которую уже прибил.
Что лучше и как использовать для такого случая?
Написал:
procedure TForm1.ListBox1Add(S: string);
var nf: string;
begin
if ListBox1.Items.Count>1000 then
ListBox1.Items.Delete(ListBox1.Items.Count-1);
ListBox1.Items.Insert(0,DateTimeToStr(Now)+': '+S);
logcount:=logcount+1;
//записать в файл логов, проверив 1 на дату
if logcount mod 1000 =0 then
try
nf:=datetimetostr(Now)+'.log';
while (pos(':',nf)>0) do
nf[pos(':',nf)]:='_';
nf:=Form2.DirectoryEdit1.Text+'/'+nf;
listbox1.Items.SaveToFile(nf);
except
showmessage(inttostr(logcount)+' Херово!!!');
end;
end;
Вроде все работает. Но когда пришлось вставить нагрузочное тестирование, оказалось, что в блоке записи в файл - что-то происходит. Доходило до того, что прога просто из памяти вываливалась.
Чую, что это из-за того, что либо 2 процесса одновременно пытаются в файл писать, либо пишется в файл строка бокса, которую уже прибил.
Что лучше и как использовать для такого случая?