зеркало из https://github.com/nextcloud/server.git
Improvements and bug fix for log reading, fixes bug oc-982
This commit is contained in:
Родитель
d203fa2c50
Коммит
bc3462f022
|
@ -63,25 +63,38 @@ class OC_Log_Owncloud {
|
|||
self::init();
|
||||
$minLevel=OC_Config::getValue( "loglevel", OC_Log::WARN );
|
||||
$entries = array();
|
||||
$handle = @fopen(self::$logFile, 'r');
|
||||
$handle = @fopen(self::$logFile, 'rb');
|
||||
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;
|
||||
fseek($handle, 0, SEEK_END);
|
||||
$pos = ftell($handle);
|
||||
$line = '';
|
||||
$entriesCount = 0;
|
||||
$lines = 0;
|
||||
// Loop through each character of the file looking for new lines
|
||||
while ($pos >= 0 && $entriesCount < $limit) {
|
||||
fseek($handle, $pos);
|
||||
$ch = fgetc($handle);
|
||||
if ($ch == "\n" || $pos == 0) {
|
||||
if ($line != '') {
|
||||
// Add the first character if at the start of the file, because it doesn't hit the else in the loop
|
||||
if ($pos == 0) {
|
||||
$line = $ch.$line;
|
||||
}
|
||||
$lines++;
|
||||
$entry = json_decode($line);
|
||||
// Add the line as an entry if it is passed the offset and is equal or above the log level
|
||||
if ($lines > $offset && $entry->level >= $minLevel) {
|
||||
$entries[] = $entry;
|
||||
$entriesCount++;
|
||||
}
|
||||
$line = '';
|
||||
}
|
||||
} else {
|
||||
$line = $ch.$line;
|
||||
}
|
||||
$pos--;
|
||||
}
|
||||
fclose($handle);
|
||||
// Extract the needed entries and reverse the order
|
||||
$entries = array_reverse(array_slice($entries, -($limit + $offset), $limit));
|
||||
}
|
||||
return $entries;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче