PHP удалить только частичное содержимое из файла журнала - PullRequest
0 голосов
/ 27 мая 2019

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

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

Мой пример файла журнала ошибок приведен ниже:

[2019-05-16 06:38:16 AM]: Catalog Import - Process started.
[2019-05-16 06:38:17 AM]: - Brands processed.
[2019-05-16 06:38:18 AM]: - Categories processed.
[2019-05-16 06:38:27 AM]: - Catalogues processed.
[2019-05-16 06:38:29 AM]: - CSV generated.
[2019-05-16 06:38:29 AM]: Catalog Import - Process completed.
[2019-05-16 06:38:29 AM]: =======================================================================
[2019-05-17 06:38:16 AM]: Catalog Import - Process started.
[2019-05-17 06:38:17 AM]: Exception - (json encoded response usually array stuffs)
[2019-05-17 06:38:18 AM]: - Categories processed.
[2019-05-17 06:38:27 AM]: - Catalogues processed.
[2019-05-17 06:38:29 AM]: Error - (json encoded response usually array stuffs)
[2019-05-17 06:38:29 AM]: Catalog Import - Process completed.
[2019-05-17 06:38:29 AM]: =======================================================================

Как лучше всего периодически удалять содержимое файла журнала?

1 Ответ

0 голосов
/ 28 мая 2019

Откройте файл и зациклите файл.
Когда вы найдете «слишком старую» дату, удалите строку.

Затем сохраните новые данные в файле журнала.

$log_file = 'catalog_import.log';
// get the file contents as array.
$lines = file( $log_file);
if (!empty($lines)) {
    foreach ($lines as $row => $line) {
        // if older than 10 days.
        if (time() - strtotime(substr($line, 1, 10)) > 60 * 60 * 24 * 10) {
            unset($lines[$row]);
        }
    }
}
//write the filtered data to the file.
file_put_contents($log_file, implode("", $lines));

die('logs cleared successfully.');

Пожалуйста, сначала сделайте это с копией, так как это непроверенный код.

...