зеркало из https://github.com/nextcloud/server.git
Improve efficiency of retrieving log file entries
This commit is contained in:
Родитель
52b3305892
Коммит
4db5481ad5
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче