Signed-off-by: Robin Appelman <robin@icewind.nl>tags/v11.0RC2
<?php | |||||
/** | |||||
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||||
* | |||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||||
* | |||||
* @license GNU AGPL version 3 or any later version | |||||
* | |||||
* This program is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Affero General Public License as | |||||
* published by the Free Software Foundation, either version 3 of the | |||||
* License, or (at your option) any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Affero General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Affero General Public License | |||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
* | |||||
*/ | |||||
namespace OC\Settings\Admin; | |||||
use OC\Log\File as LogFile; | |||||
use OCP\AppFramework\Http\TemplateResponse; | |||||
use OCP\IConfig; | |||||
use OCP\Settings\ISettings; | |||||
class Logging implements ISettings { | |||||
/** @var IConfig */ | |||||
private $config; | |||||
/** | |||||
* @param IConfig $config | |||||
*/ | |||||
public function __construct(IConfig $config) { | |||||
$this->config = $config; | |||||
} | |||||
/** | |||||
* @return TemplateResponse | |||||
*/ | |||||
public function getForm() { | |||||
$logType = $this->config->getSystemValue('log_type', 'file'); | |||||
$showLog = ($logType === 'file' || $logType === 'owncloud'); | |||||
$numEntriesToLoad = 5; | |||||
$entries = LogFile::getEntries($numEntriesToLoad + 1); | |||||
$entriesRemaining = count($entries) > $numEntriesToLoad; | |||||
$entries = array_slice($entries, 0, $numEntriesToLoad); | |||||
$logFileExists = file_exists(LogFile::getLogFilePath()) ; | |||||
$logFileSize = $logFileExists ? filesize(LogFile::getLogFilePath()) : 0; | |||||
$parameters = [ | |||||
'loglevel' => $this->config->getSystemValue('loglevel', 2), | |||||
'entries' => $entries, | |||||
'entriesremain' => $entriesRemaining, | |||||
'doesLogFileExist' => $logFileExists, | |||||
'logFileSize' => $logFileSize, | |||||
'showLog' => $showLog, | |||||
]; | |||||
return new TemplateResponse('settings', 'admin/logging', $parameters, ''); | |||||
} | |||||
/** | |||||
* @return string the section ID, e.g. 'sharing' | |||||
*/ | |||||
public function getSection() { | |||||
return 'logging'; | |||||
} | |||||
/** | |||||
* @return int whether the form should be rather on the top or bottom of | |||||
* the admin section. The forms are arranged in ascending order of the | |||||
* priority values. It is required to return a value between 0 and 100. | |||||
* | |||||
* E.g.: 70 | |||||
*/ | |||||
public function getPriority() { | |||||
return 0; | |||||
} | |||||
} |
0 => [new Section('server', $this->l->t('Server settings'), 0)], | 0 => [new Section('server', $this->l->t('Server settings'), 0)], | ||||
5 => [new Section('sharing', $this->l->t('Sharing'), 0)], | 5 => [new Section('sharing', $this->l->t('Sharing'), 0)], | ||||
45 => [new Section('encryption', $this->l->t('Encryption'), 0)], | 45 => [new Section('encryption', $this->l->t('Encryption'), 0)], | ||||
90 => [new Section('logging', $this->l->t('Logging'), 0)], | |||||
98 => [new Section('additional', $this->l->t('Additional settings'), 0)], | 98 => [new Section('additional', $this->l->t('Additional settings'), 0)], | ||||
99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)], | 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)], | ||||
]; | ]; | ||||
$form = new Admin\Sharing($this->config); | $form = new Admin\Sharing($this->config); | ||||
$forms[$form->getPriority()] = [$form]; | $forms[$form->getPriority()] = [$form]; | ||||
} | } | ||||
if($section === 'logging') { | |||||
/** @var ISettings $form */ | |||||
$form = new Admin\Logging($this->config); | |||||
$forms[$form->getPriority()] = [$form]; | |||||
} | |||||
if($section === 'additional') { | if($section === 'additional') { | ||||
/** @var ISettings $form */ | /** @var ISettings $form */ | ||||
$form = new Admin\Additional($this->config); | $form = new Admin\Additional($this->config); |
* @package OC\Settings\Controller | * @package OC\Settings\Controller | ||||
*/ | */ | ||||
class LogSettingsController extends Controller { | class LogSettingsController extends Controller { | ||||
/** | |||||
* @var \OCP\IConfig | |||||
*/ | |||||
private $config; | |||||
/** | |||||
* @var \OCP\IL10N | |||||
*/ | |||||
private $l10n; | |||||
/** | |||||
* @param string $appName | |||||
* @param IRequest $request | |||||
* @param IConfig $config | |||||
*/ | |||||
public function __construct($appName, | |||||
IRequest $request, | |||||
IConfig $config, | |||||
IL10N $l10n) { | |||||
parent::__construct($appName, $request); | |||||
$this->config = $config; | |||||
$this->l10n = $l10n; | |||||
} | |||||
/** | |||||
* set log level for logger | |||||
* | |||||
* @param int $level | |||||
* @return JSONResponse | |||||
*/ | |||||
public function setLogLevel($level) { | |||||
if ($level < 0 || $level > 4) { | |||||
return new JSONResponse([ | |||||
'message' => (string) $this->l10n->t('log-level out of allowed range'), | |||||
], Http::STATUS_BAD_REQUEST); | |||||
} | |||||
$this->config->setSystemValue('loglevel', $level); | |||||
return new JSONResponse([ | |||||
'level' => $level, | |||||
]); | |||||
} | |||||
/** | |||||
* get log entries from logfile | |||||
* | |||||
* @param int $count | |||||
* @param int $offset | |||||
* @return JSONResponse | |||||
*/ | |||||
public function getEntries($count=50, $offset=0) { | |||||
return new JSONResponse([ | |||||
'data' => \OC\Log\File::getEntries($count, $offset), | |||||
'remain' => count(\OC\Log\File::getEntries(1, $offset + $count)) !== 0, | |||||
]); | |||||
} | |||||
/** | /** | ||||
* download logfile | * download logfile | ||||
* | * |
<?php | |||||
/** | |||||
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||||
* | |||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||||
* | |||||
* @license GNU AGPL version 3 or any later version | |||||
* | |||||
* This program is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Affero General Public License as | |||||
* published by the Free Software Foundation, either version 3 of the | |||||
* License, or (at your option) any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Affero General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Affero General Public License | |||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
* | |||||
*/ | |||||
/** @var \OCP\IL10N $l */ | |||||
/** @var array $_ */ | |||||
$levels = ['Debug', 'Info', 'Warning', 'Error', 'Fatal']; | |||||
$levelLabels = [ | |||||
$l->t( 'Everything (fatal issues, errors, warnings, info, debug)' ), | |||||
$l->t( 'Info, warnings, errors and fatal issues' ), | |||||
$l->t( 'Warnings, errors and fatal issues' ), | |||||
$l->t( 'Errors and fatal issues' ), | |||||
$l->t( 'Fatal issues only' ), | |||||
]; | |||||
?> | |||||
<div class="section" id="log-section"> | |||||
<h2><?php p($l->t('Log'));?></h2> | |||||
<?php if ($_['showLog'] && $_['doesLogFileExist']): ?> | |||||
<table id="log" class="grid"> | |||||
<?php foreach ($_['entries'] as $entry): ?> | |||||
<tr> | |||||
<td> | |||||
<?php p($levels[$entry->level]);?> | |||||
</td> | |||||
<td> | |||||
<?php p($entry->app);?> | |||||
</td> | |||||
<td class="log-message"> | |||||
<?php p($entry->message);?> | |||||
</td> | |||||
<td class="date"> | |||||
<?php if(is_int($entry->time)){ | |||||
p(OC_Util::formatDate($entry->time)); | |||||
} else { | |||||
p($entry->time); | |||||
}?> | |||||
</td> | |||||
<td><?php isset($entry->user) ? p($entry->user) : p('--') ?></td> | |||||
</tr> | |||||
<?php endforeach;?> | |||||
</table> | |||||
<p><?php p($l->t('What to log'));?> <select name='loglevel' id='loglevel'> | |||||
<?php for ($i = 0; $i < 5; $i++): | |||||
$selected = ''; | |||||
if ($i == $_['loglevel']): | |||||
$selected = 'selected="selected"'; | |||||
endif; ?> | |||||
<option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option> | |||||
<?php endfor;?> | |||||
</select></p> | |||||
<?php if ($_['logFileSize'] > 0): ?> | |||||
<a href="<?php print_unescaped(OC::$server->getURLGenerator()->linkToRoute('settings.LogSettings.download')); ?>" class="button" id="downloadLog"><?php p($l->t('Download logfile'));?></a> | |||||
<?php endif; ?> | |||||
<?php if ($_['entriesremain']): ?> | |||||
<input id="moreLog" type="button" value="<?php p($l->t('More'));?>..."> | |||||
<input id="lessLog" type="button" value="<?php p($l->t('Less'));?>..."> | |||||
<?php endif; ?> | |||||
<?php if ($_['logFileSize'] > (100 * 1024 * 1024)): ?> | |||||
<br> | |||||
<em> | |||||
<?php p($l->t('The logfile is bigger than 100 MB. Downloading it may take some time!')); ?> | |||||
</em> | |||||
<?php endif; ?> | |||||
<?php endif; ?> | |||||
</div> |