从日志文件中获取最后5条记录

时间:2017-10-28 05:49:57

标签: php file

我有一个文件夹用户日志,它分别包含每个用户的日志文件。现在,我想在整个日志文件中搜索特定文本,并获取该文本的最后5个条目。 在每个日志文件中,行输入的日期和时间可用,如

2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017

CODE:

function getUserLog($path_to_check, $search) 
{
    $result = array();

    foreach (glob($path_to_check . '*.txt') as $filename) {

          foreach (file($filename) as $lineNumber => $line) {

               if (strpos($line, $search) !== false) {

                   $fil_name= basename($filename,".txt");

                    $result[] = $line."--".$fil_name;  
                }
           }
    }

    return $result;

}
$path_to_check = "userlogs/";

if ( is_dir($path_to_check)) {
   $user_log = getUserLog($path_to_check,$cino);
}

1 个答案:

答案 0 :(得分:1)

您可以做的是将文件名存储为数组键(只要文件名是有效的array键),然后将匹配的行(忽略换行符)添加到该数组。 最后添加具有文件名作为键的数组以及匹配的行到s.scan(/((\w)\2*)/).map(&:first) # => ["aaaaaaa", "bbbbbbbb", "c"]

然后,您可以循环$result,并使用array_slice$user_log获取最后5个,并将其添加到新数组$matchedLines

例如:

$resultSliced

然后您的结果将具有如下结构:

function getUserLog($path_to_check, $search)
{
    $result = array();
    foreach (glob($path_to_check . '*.txt') as $filename) {
        foreach (file($filename, FILE_IGNORE_NEW_LINES) as $lineNumber => $line) {
            if (strpos($line, $search) !== false) {
                $fil_name = basename($filename, ".txt");
                $result[$fil_name][] = $line;
            }
        }
    }
    return $result;
}

$resultSliced = [];
$path_to_check = "userlogs/";
if (is_dir($path_to_check)) {
    $user_log = getUserLog($path_to_check, $cino);
    foreach ($user_log as$fileName => $matchedLines) {
        $resultSliced[$fileName] = array_slice($matchedLines, -5, 5, true);
    }
}