Improve efficiency of retrieving log file entries

This commit is contained in:
Michael Gapczynski 2012-06-01 14:38:25 -04:00
Родитель 52b3305892
Коммит 4db5481ad5
1 изменённых файлов: 19 добавлений и 16 удалений

Просмотреть файл

@ -62,23 +62,26 @@ class OC_Log_Owncloud {
public static function getEntries($limit=50, $offset=0){
self::init();
$minLevel=OC_Config::getValue( "loglevel", OC_Log::WARN );
$entries=array();
if(!file_exists(self::$logFile)) {
return array();
}
$contents=file(self::$logFile);
if(!$contents) {//error while reading log
return array();
}
$end=max(count($contents)-$offset-1, 0);
$start=max($end-$limit,0);
$i=$end;
while($i>$start){
$entry=json_decode($contents[$i]);
if($entry->level>=$minLevel){
$entries[]=$entry;
$entries = array();
$handle = fopen(self::$logFile, 'r');
if ($handle) {
// Just a guess to set the file pointer to the right spot
$maxLineLength = 150;
fseek($handle, -($limit * $maxLineLength + $offset * $maxLineLength), SEEK_END);
// Skip first line, because it is most likely a partial line
fgets($handle);
while (!feof($handle)) {
$line = fgets($handle);
if (!empty($line)) {
$entry = json_decode($line);
if ($entry->level >= $minLevel) {
$entries[] = $entry;
}
}
}
$i--;
fclose($handle);
// Extract the needed entries and reverse the order
$entries = array_reverse(array_slice($entries, -($limit + $offset), $limit));
}
return $entries;
}