04.01.2017, 18:54
Повторно кину лог, который щас работает. Ничего особенного, казалось бы.
В последний месяц лог набивает до 2.5мб в день, 1 день ~ 30.000 записей, 2 дня ~ 60.000, ну явно не 4294967296/2+1 открытий.
Да вот я поспорю, что лучше забыть про файлы, и юзать что-то другое. Реальный пример - Зная мод dimonml'а, так у него лог тоже на файлах, и набивал в лучшие времена до 50Мб (задумайтесь в эти цифры), и мод мог работать месяц без перезагрузки, это немыслимо.
Уже пол года спасаюсь перезагрузками. Хорошо, что хостер поддерживает возможность автоматом перезагружать сервак в указзаное мною время (делается exit и сам поднимается).
PHP Code:
// Макс. длина одной строки в логе (время + группа + текст)
const MAXLEN_STR_LOG = 300;
new str_log[STRING_256];
#define Log(%1,%2,%3);\
{format(str_log, STRING_256, %2, %3);\
_Log(%1, str_log);}
_Log(group[], text[])
{
new day, month, year, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
new name_log[STRING_64];
format
(
name_log, STRING_64,
"log/%d/%02d/log_%02d.%02d.%02d.txt",
year, month, day, month, year-2000
);
new File:handle = fopen(name_log, io_append);
if (handle)
{
new str_fmt_log[MAXLEN_STR_LOG];
format
(
str_fmt_log, MAXLEN_STR_LOG, "%02d.%02d.%02d %02d:%02d:%02d <%s> %s\r\n",
day, month, year-2000, hour, minute, second, group, text
);
for (new i = 0, len = strlen(str_fmt_log); i < len; i++)
{
fputchar(handle, str_fmt_log[i], false);
}
fclose(handle);
}
else
{
printf ("Не удалось создать/открыть файл лога '%s'", name_log);
}
}
Quote:
когда будет открытие под номером 4294967296/2+1 переменная нового открытия уйдет в минус, и все проверки на if(f) идут по бороде.
|
Да вот я поспорю, что лучше забыть про файлы, и юзать что-то другое. Реальный пример - Зная мод dimonml'а, так у него лог тоже на файлах, и набивал в лучшие времена до 50Мб (задумайтесь в эти цифры), и мод мог работать месяц без перезагрузки, это немыслимо.
Уже пол года спасаюсь перезагрузками. Хорошо, что хостер поддерживает возможность автоматом перезагружать сервак в указзаное мною время (делается exit и сам поднимается).