工做中遇到一個問題,運營或客服常常會問一些用戶使用中的問題涉及到日誌查詢,開始的時候來一個給查一下日誌。。後來發現天天都會問個五六次。。沒辦法後來就給弄了個讀日誌的工具。php
讀着讀着發現有時候會出現掛掉的狀況,不頻發並且也不是對外的功能就沒當回事兒,可是後來將多臺服務器的日誌互相作了軟鏈整合以後發現基本每次查詢都會掛掉,逐找時間排查問題。linux
看了眼異常日誌發現日誌過大,原來搜索日誌的方法比較簡單粗暴,直接讀取後存入數組再遍歷匹配。可是這樣操做如今天天的日誌都上幾百兆了明顯不可行了,後來想着日誌再次細分一下吧,把一些相對比較大的日誌按照類型再次劃分了目錄,可是想了想若是流量比如今大的話即便細分了也仍是可能會出現問題。shell
想了想方案,後來以爲仍是用linux的grep來處理比較方便快捷,代碼以下:數組
if ($search['keyword'] != ''){ $file_dir = 'log/'.$path.'.log'; if (!is_file($file_dir))goto index; $info = shell_exec("grep -A 3 ".$search['keyword'].' '.$file_dir); if (empty($info))goto index; $ret = explode(PHP_EOL,$info); }
主要是利用shell_exec來執行grep返回搜索值,沒具體算過期間,可是二百多兆的文件也都能在一秒內處理完。服務器