provide a logging mechanism

This commit is contained in:
Robin Appelman 2011-10-16 20:49:14 +02:00
parent d11a8f4103
commit 820cd0fb75
4 changed files with 143 additions and 0 deletions

View File

@ -222,6 +222,8 @@ class OC_App{
$settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkTo( "settings", "users.php" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" ));
// admin apps menu
$settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkTo( "settings", "apps.php?installed" ), "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" ));
// admin log menu
$settings[] = array( "id" => "core_log", "order" => 4, "href" => OC_Helper::linkTo( "settings", "log.php" ), "name" => $l->t("Log"), "icon" => OC_Helper::imagePath( "log", "apps.svg" ));
// if there're some admin forms
if(!empty(self::$adminForms))

71
lib/log.php Normal file
View File

@ -0,0 +1,71 @@
<?php
/**
* ownCloud
*
* @author Robin Appelman
* @copyright 2011 Robin Appelman icewind1991@gmail.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
*logging utilities
*
* Log is saved at data/owncloud.log (on default)
*/
class OC_Log{
const DEBUG=0;
const INFO=1;
const WARN=2;
const ERROR=3;
const FATAL=4;
/**
* write a message in the log
* @param string $app
* @param string $message
* @param int level
*/
public static function write($app,$message,$level){
$minLevel=OC_Config::getValue( "loglevel", 2 );
if($level>$minLevel){
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT.'/data' );
$logFile=OC_Config::getValue( "logfile", $datadir.'/owncloud.log' );
$entry=array('app'=>$app,'message'=>$message,'level'=>$level,'time'=>time());
$fh=fopen($logFile,'a');
fwrite($fh,json_encode($entry)."\n");
fclose($fh);
}
}
public static function getEntries(){
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT.'/data' );
$logFile=OC_Config::getValue( "logfile", $datadir.'/owncloud.log' );
$entries=array();
if(!file_exists($logFile)){
return array();
}
$fh=fopen($logFile,'r');
while(!feof($fh)){
$line=fgets($fh);
if($line){
$entries[]=json_decode($line);
}
}
fclose($fh);
return $entries;
}
}

41
settings/log.php Normal file
View File

@ -0,0 +1,41 @@
<?php
/**
* ownCloud
*
* @author Robin Appelman
* @copyright 2011 Robin Appelman icewind1991@gmail.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once('../lib/base.php');
OC_Util::checkAdminUser();
// Load the files we need
OC_Util::addStyle( "settings", "settings" );
OC_Util::addScript( "settings", "apps" );
OC_App::setActiveNavigationEntry( "core_log" );
$entries=OC_Log::getEntries();
function compareEntries($a,$b){
return $b->time-$a>time;
}
usort($entries, 'compareEntries');
$tmpl = new OC_Template( "settings", "log", "user" );
$tmpl->assign('entries',$entries);
$tmpl->printPage();

View File

@ -0,0 +1,29 @@
<?php /**
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
$levels=array('DEBUG','INFO','WARN','ERROR','FATAL');
?>
<div id="controls">
</div>
<table>
<?php foreach($_['entries'] as $entry):?>
<tr>
<td>
<?php echo $levels[$entry->level];?>
</td>
<td>
<?php echo $entry->app;?>
</td>
<td>
<?php echo $entry->message;?>
</td>
<td>
<?php echo $l->l('datetime',$entry->time);?>
</td>
</tr>
<?php endforeach;?>
</table>