Импорт логов Laravel в базу данных SQLite

0

Импорт логов Laravel в базу данных SQLite

В данной статье мы рассмотрим, как можно импортировать логи из файла логов Laravel в базу данных SQLite с помощью PHP. Приведенный ниже код выполняет следующие шаги: проверяет наличие аргумента командной строки, считывает файл логов, разбирает каждую строку и вставляет данные в базу данных.

Исходный код с комментариями

<?php
// Проверяем, передан ли путь к файлу логов в качестве аргумента командной строки
if ($argc !== 2) {
    echo "Usage: php log_importer.php path/to/laravel.logn";
    exit(1); // Завершаем выполнение скрипта с кодом ошибки
}

// Получаем путь к файлу логов из аргумента командной строки
$logFile = $argv[1];

// Определяем путь к файлу базы данных SQLite
$dbFile = './logs.sqlite';

// Создаем (или открываем) базу данных SQLite
$db = new PDO('sqlite:' . $dbFile);

// Создаем таблицу логов, если она не существует
$db->exec("CREATE TABLE IF NOT EXISTS logs (
    id INTEGER PRIMARY KEY,
    date TEXT,
    environment TEXT,
    level TEXT,
    message TEXT
)");

// Функция для разбора строки лога
function parseLogLine($line): ?array
{
    // Определяем шаблон для разбора строки лога
    $pattern = '/^[(.*?)] (.*?).(w+): (.*)$/';
    // Если строка соответствует шаблону, разбираем ее
    if (preg_match($pattern, $line, $matches)) {
        return [
            'date' => $matches[1],           // Дата и время
            'environment' => $matches[2],    // Окружение (environment)
            'level' => $matches[3],          // Уровень лога (например, error, info)
            'message' => $matches[4]         // Сообщение лога
        ];
    }
    return null; // Возвращаем null, если строка не соответствует шаблону
}

// Проверяем, существует ли файл логов
if (file_exists($logFile)) {
    // Открываем файл логов для чтения
    $file = fopen($logFile, 'r');
    // Читаем файл построчно
    while ($line = fgets($file)) {
        // Разбираем строку лога
        $logEntry = parseLogLine($line);
        // Если строка успешно разобрана, вставляем данные в базу данных
        if ($logEntry) {
            $stmt = $db->prepare("INSERT INTO logs (date, environment, level, message) VALUES (:date, :environment, :level, :message)");
            $stmt->bindParam(':date', $logEntry['date']);
            $stmt->bindParam(':environment', $logEntry['environment']);
            $stmt->bindParam(':level', $logEntry['level']);
            $stmt->bindParam(':message', $logEntry['message']);
            $stmt->execute(); // Выполняем вставку данных
        }
    }
    // Закрываем файл после чтения
    fclose($file);
    echo "Файл логов был успешно импортирован в базу.n";
} else {
    // Выводим сообщение об ошибке, если файл логов не существует
    echo "Лог файл не существует.n";
    exit(1); // Завершаем выполнение скрипта с кодом ошибки
}
?>

Описание работы скрипта

  • Проверка аргументов командной строки: Скрипт проверяет, был ли передан путь к файлу логов в качестве аргумента командной строки. Если аргумент не передан, выводится сообщение с инструкцией по использованию, и скрипт завершает работу.

  • Подключение к базе данных SQLite: Скрипт определяет путь к файлу базы данных SQLite и подключается к ней. Если база данных не существует, она будет создана автоматически.

  • Создание таблицы логов: Если таблица logs не существует, она создается с полями id, date, environment, level и message.

  • Функция для разбора строк логов: Функция parseLogLine использует регулярное выражение для разбора строк логов. Если строка соответствует шаблону, возвращается массив с данными; если нет, возвращается null.

  • Чтение файла логов: Скрипт проверяет, существует ли файл логов. Если файл существует, он открывается для чтения построчно.

  • Вставка данных в базу данных: Каждая строка файла логов разбирается и, если успешно, вставляется в таблицу logs базы данных SQLite.

  • Завершение работы: После успешной обработки всех строк файла логов, скрипт выводит сообщение об успешном импорте данных в базу данных SQLite. Если файл логов не существует, выводится сообщение об ошибке.

  • Этот скрипт является простым и эффективным способом импорта логов Laravel в базу данных SQLite для дальнейшего анализа и обработки данных.

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.