извлекать запросы mysql из файлов журнала между символами табуляции и переводами строки - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть большой лог-файл с логами mysql.Сначала это временная метка запроса, затем тип, которому я верю, а затем фактический запрос, который был сделан к базе данных.
, и, например, это

2018-12-07T08:45:12.653298Z(tabspace)(more spaces here)493(space)Query(tabspace)SHOW TABLES FROM <code>test_c (новая строка)

проблема в том, что для больших запросов журнал использует больше (новые строки), поэтому 1 журнал запроса может занимать несколько строк.Так что это было бы что-то вроде следующего

2018-12-07T08:45:12.931589Z 22 Query SELECT nav FROM main_nav WHERE 'main/index' LIKE CONCAT(url, '%') OR '/main/index/' LIKE CONCAT(url, '%') OR '/main/index' LIKE CONCAT(url, '%') OR 'main/index' LIKE CONCAT(url, '%') ORDER BY LENGTH(url) DESC

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

1 Ответ

0 голосов
/ 07 декабря 2018

Это поиск по ключевому слову "QUERY".Я проверил с помощью файла журнала, созданного с примерами, которые вы предоставили в вопросе.Вы должны заменить эхо вставкой в ​​таблицу, которую вы хотите. Надеюсь, эта помощь

<?php

    $f=fopen("logfile.log","r");
    $QueryFound=false;
    $ExtractedQuery='';
    while ($s=fgets($f)) {
        $SearchQueryKeyword=strpos($s," Query");
        if ($SearchQueryKeyword) {
            if ($QueryFound) {
                echo $ExtractedQuery."<br/><br/>";
            }
            $QueryFound=true;
            $ExtractedQuery=substr($s,$SearchQueryKeyword+6);
        }
        else {
            $ExtractedQuery.= $s;
        }
    }
    echo $ExtractedQuery;

    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...