![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ограничить размер лог-файла программы [D7, WinXP]
Tack © (2005-02-17 19:52:00)Какой вы предложите самый производительный способ ограничить размер лог-файла программы?
Условия задачи:
1) Файл простой текстовый (Text).
2) Файл всегда открывается для дозаписи (Append)
3) Каждая новая запись занимает ровно одну строку (один WriteLn)
4) Ограничение размера - в сотнях килобайт, удалять информацию можно только строками от начала файла.
Хотелось бы не перерасходовать память, загружая лог полностью в TStringList, а писать сразу на диск по 5-10 строк, после каждой группы вызовов WriteLn вызывая Flush.
Размер файла на диске можно контролировать через апишную GetFileSize(), получив дескриптор файла с правами на чтение.
А вот как эффективнее всего удалять лишние строки из начала файла при превышении размера?
Германн (2005-02-22 01:56:00) [1]>Anatoly Podgoretsky © (21.02.05 07:50) [34]
>Ты ничего не путаешь, кто именно выразил недовольство?
Имхо, ничего.
В моем посте Германн © (20.02.05 01:44) [29] было лишь недоумениепоскольку после некоторого трепа начиная с
>Anatoly Podgoretsky © (17.02.05 23:52) [14]
Вы Анатолий закончили данное обсуждение постом
> Anatoly Podgoretsky © (19.02.05 10:03) [21]
>>Tack (17.02.05 19:52)
>>Могу дать рекомендацию по смене идеологии.
>>1. Отказаться от идеи усечения размера лога;
>>2. Вместо этого не усекать лог, а переименовывать его по >>окончанию периода (час, день, неделя, месяц);
>>3. В качестве имени старого лога использовать дату в >>форматированом виде, например как поступает Микрософт в MS SQL...
Моё недоумение касалось лишь того, что Вами был полностью проигнорирован мой пост, в котором (пусть конспективно), но все-таки был предложен вариант, который Вы развернутопредложили через двое суток после моего. А между этими событиями были и еше несколько "невразумительных" постов от Вас. Ну, например о деньгах и об отказе. Какие деньги? И от чего отказываться?
Мой пост "Германн © (19.02.05 02:11) [18]" говорил лишь о "несообразности" заниматься "разбором" логов путем разработки программ разборки логов, путем разработки программ чтения результатов программ разборки логов... и т.д.
Т.е.
"Натуралистами открыты
У паразитов паразиты
И произвел переполох
Тот факт, что блохи есть у блох.
И обнаружил микроскоп,
Что на клопе бывает клоп,
Питающийся паразитом,
На нем - другой, ad infinitum.
Дж.Свифт. "О поэзии" (1723)
В переводе С.Я.Маршака.
Anatoly Podgoretsky (2005-02-21 07:50:00) [2]Ты ничего не путаешь, кто именно выразил недовольство?
Германн (2005-02-21 03:11:00) [3]2 Arm79 © (20.02.05 13:44) [32]
>Германн © (20.02.05 1:44) [29]
>Все сказал Anatoly Podgoretsky ©
>imho некрасиво
Пардон, а что некрасиво?
Сабж был о методе ведения лог-файла.
Автор сабжа в посте Tack (17.02.05 20:23) [9]
спросил:
>Aleks, а если файл - 5-10 МБайт?
На что я ему ответил:
>Германн © (17.02.05 20:27) [10]
>Дарю идею. Имя файла для лога формировать так:
>DateToStr(Date).Имя программы.log.txt
Это однозначноопределяет, что лог-файлы формируются по дням. В каждый день свой лог-файл.
После этого был некий треп о размерах,отчетах и алгоритмах.
Начиная с Anatoly Podgoretsky © (17.02.05 23:52) [14]
И заканчивая Anatoly Podgoretsky © (19.02.05 09:57) [20]
После того пошла рекомендация от АР:
>Anatoly Podgoretsky © (19.02.05 10:03) [21]
>Tack (17.02.05 19:52)
>Могу дать рекомендацию по смене идеологии.
>1. Отказаться от идеи усечения размера лога;
>2. Вместо этого не усекать лог, а переименовывать его по >окончанию периода (час, день, неделя, месяц);
>3. В качестве имени старого лога использовать дату в >форматированом виде, например как поступает Микрософт в MS SQL -> yyyymmddhhnnss.log, для ежедневных yyyymmdd.log
>4. определить срок хранения логов, по окончанию удалять.
>И у тебя из твоих пунктов остаются только первые три и >добавляются мои 2, 3 и 4
>Скорость работы и требования к ресурсам великолепные.
>Твой пункт 2 должен делаться для каждого добавления, каждой >отдельной строки.
Потом вы выступили с совместной дискуссией о времени/дате.Ну и ради бога, хотя суть её я не уловил.
После чего АП выразил неудовольствие моим постом. Причем сказал, что я кому-то, что-то запрещаю.
2 Анатолий Подгорецкий
Я различаю развернутыеответы от конспективных. Но Вам ли жаловаться на сей факт? Или конспективныеответы имеете право давать только Вы? А все остальные ДОЛЖНЫдавать только развернутые?
Кстати. В модераторы не подписываются. И уж это должнобыть Вам известно! Иначе - полный ... Вы же "фидошник"!
Arm79 (2005-02-20 13:44:00) [4]Германн © (20.02.05 1:44) [29]
Все сказал Anatoly Podgoretsky ©
imho некрасиво
Anatoly Podgoretsky (2005-02-20 08:27:00) [5]Мы подискутировали о методах ведения логов, а единственным недовольным остался ты и ты почему то не автор вопрос, а посторонний читатель.
Anatoly Podgoretsky (2005-02-20 08:24:00) [6]Ты запрещаешь другим писать сюда, даже если у них совет совпадает, ты не силшком много на себя берешь?
Не говоря уже о том, что ты читать не умеешь, не различаешь развернутые ответы от конспективных.
Может тебе в модераторы подписаться?
Германн (2005-02-20 01:44:00) [7]2 AP
2 Arm79
А что вы предложили иное, чем:
Германн © (17.02.05 20:27) [10]
Дарю...
Ну разве что поместили имя программы перед датой, а не наоборот. Что, имхо, как некогда высказался Digitman - монопенисно!
Eraser (2005-02-19 17:34:00) [8]Tack
Зачем изобретать велосипед? Используй простенький движок БД, например QBase- просто, чётко, понятно и нет никакого перерасхода.
Можешь конечно и более крутые движки использовать, если информации много логировать надо...
Anatoly Podgoretsky (2005-02-19 17:28:00) [9]Да по поводу сортировки, сортировка по имени (время_программа) покажет все файлы в хронологическом порядке вне зависимости от того изменялось время файла или нет, для важных случаев время берется не с локального компьютера, а с опорного.
Anatoly Podgoretsky (2005-02-19 17:26:00) [10]Насчет удобства, кому как, например соритровка по дате позволит очень просто удалить все записи, вне зависимости от программы, общим централизованным диспетчером.
По времени неверно потому что время может оказаться сбитым (правда это же будет относиться и к имени файла), а потому что оно уже и так существует в названии, а при определенных методах копирования файлов, например с ftp сервера просто окажется неверным. Про то что можно изменить и имя и время говорить не стоит, речь про штатные средства. Хотя ничего страшного нет, просто альтернативные варианты, в которых более широкий подход. Оба работают.
Arm79 (2005-02-19 17:13:00) [11]Anatoly Podgoretsky ©
Определение по времени неверно по сути
Не совсем. Если я прихожу на следующий день, а мне говорят, что примерно в 15:00 программа сбойнула. Тогда я и смотрю во времени.
Вероятнее всего и название программы лишнее
Действительно, лишнее. Но кроме меня эти логи читают еще и другие люди. Эти логи расползаются по компам. Потому в названии лога присутствует имя программы. А почему не yyyymmdd_progname.log - потому что при сортировке по имени файла так удобнее смотреть.
Anatoly Podgoretsky (2005-02-19 10:31:00) [12]Arm79 © (19.02.05 10:24) [22]
Вероятнее всего и название программы лишнее, разные логи хранить удобнее в разных папках, но если нужно в одной, то для удобства можно видоизменить формат на yyyymmdd_progname.log - хотя это и не важно.
Anatoly Podgoretsky (2005-02-19 10:28:00) [13]Определение по времени неверно по сути, вся нужная информация находится в названии лога.
Arm79 (2005-02-19 10:24:00) [14]Германн © (19.02.05 2:11) [18]
У меня при необходимости лог-файлы могут занимать и 200 мегабайт. Это когда в целях тестирования работы программы за весь день. Я тоже озаботился проблемой поиска нужной информации и сделал так. Программа пишет в лог исходя из опций, которые я задаю в инишнике. Их у меня штук 15. Например: ошибки, штатная работа программы, вызов функций из внешних модулей, отладочная информация и тд и тп.
Формат лога такой
[hh:nn:ss:zzz] tab [Option] tab [Message]
После чего мне не составило труда написать в течении пары часов анализатор по нужному мне времени и по нужным мне критериям.
Далее смотри
Anatoly Podgoretsky © (19.02.05 10:03) [21]
Логи у меня вормируются ежедневно. То есть в течении дня работа пишет всего в один файл лога. Имя такое [имя программы]_YYYY_mm_dd.log
История логов - 1 неделя. Определяю по времени модификации файлов. Все, чтостарее - удаляю.
PS В штатном режиме работы лог занимает порядка 50 кбайт
Anatoly Podgoretsky (2005-02-19 10:03:00) [15]Tack (17.02.05 19:52)
Могу дать рекомендацию по смене идеологии.
1. Отказаться от идеи усечения размера лога;
2. Вместо этого не усекать лог, а переименовывать его по окончанию периода (час, день, неделя, месяц);
3. В качестве имени старого лога использовать дату в форматированом виде, например как поступает Микрософт в MS SQL - yyyymmddhhnnss.log, для ежедневных yyyymmdd.log
4. определить срок хранения логов, по окончанию удалять.
И у тебя из твоих пунктов остаются только первые три и добавляются мои 2, 3 и 4
Скорость работы и требования к ресурсам великолепные.
Твой пункт 2 должен делаться для каждого добавления, каждой отдельной строки.
Концепции обработки могут быть любые, хоть заливать эти логи в SQL Server/File Server BD
Anatoly Podgoretsky (2005-02-19 09:57:00) [16]Германн © (19.02.05 02:11) [18]
Тогда надо отказаться от идеи по причине отсутствия денег.
Германн (2005-02-19 02:27:00) [17]К Германн © (19.02.05 02:11) [18]
Насчет "отчета".
Если я знаю и уверен в этом, что сейчас (где-то, когда-то) произошла ошибка, или программа сработала не так как нужно, или что-то еще, я сформирую вышеупомянутый "отчет". Только вот поможет ли он кому-нибудь? Без полного анализа лог-файла?
Германн (2005-02-19 02:11:00) [18]>Kerk © (18.02.05 04:44) [16]
>> Копаться в "многометровом" логе - не по силам! А ведь
>> в логе нужно именно "копаться", иначе - зачем он нужен!
>значит нужны средства для анализа этого лога. не просто >текстовый редактор.
Нужны! Только вот разработка их почти соразмерна по времени и затратам с разработкой самой программы. А где взять деньги на оплату?
>> Кроме того в логе (по умолчанию) может "копаться" и
>> юзер, который многого не знает! А, в добавок, этого
>> самого юзера заставляют высылать лог по почте! И как
>> быть с этими "метрами"?
>дык нужено высылать не весь лог... мелкософт же тебя просит не >лог выслать..а отчет генерирует.
Дык! Мелкософт меня не просит. Но и не помогает. Может быть зарегистрированные юзеры Windows и могут сказать что-либо о помощи мелкософт при ошибках.
А вот генерация "отчета", на который вы ссылаетесь - есть прерогатива системы, т.е. Windows(читай Мелкософт). Т.о. они могут, а я нет!
Shirson (2005-02-18 07:26:00) [19]>Aleks
for i:=0 to 3 do // сколько строк удалить, сейчас 3
Memo1.Lines.Delete(i);
Этот код удалит не первые три строки, а первую, третью, пятую и седьмую (итого четыре, кстати).
А вот этот - первые три:
for i:=0 to 2 do
Memo1.Lines.Delete( 0);
Kerk (2005-02-18 04:44:00) [20]
> Копаться в "многометровом" логе - не по силам! А ведь
> в логе нужно именно "копаться", иначе - зачем он нужен!
значит нужны средства для анализа этого лога. не просто текстовый редактор.
> Кроме того в логе (по умолчанию) может "копаться" и
> юзер, который многого не знает! А, в добавок, этого
> самого юзера заставляют высылать лог по почте! И как
> быть с этими "метрами"?
дык нужено высылать не весь лог... мелкософт же тебя просит не лог выслать..а отчет генерирует.