|
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|