@@ -1,78 +1,39 @@ | |||
<?php | |||
/** | |||
* ownCloud | |||
* | |||
* @author Robin Appelman | |||
* @copyright 2012 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/>. | |||
* | |||
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> | |||
* This file is licensed under the Affero General Public License version 3 or | |||
* later. | |||
* See the COPYING-README file. | |||
*/ | |||
/** | |||
*logging utilities | |||
* logging utilities | |||
* | |||
* Log is saved at data/owncloud.log (on default) | |||
* Log is saved by default at data/owncloud.log using OC_Log_Owncloud. | |||
* Selecting other backend is done with a config option 'log_type'. | |||
*/ | |||
class OC_Log{ | |||
class OC_Log { | |||
const DEBUG=0; | |||
const INFO=1; | |||
const WARN=2; | |||
const ERROR=3; | |||
const FATAL=4; | |||
static protected $class = null; | |||
/** | |||
* 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); | |||
} | |||
} | |||
/** | |||
* get entries from the log in reverse chronological order | |||
* @param int limit | |||
* @param int offset | |||
* @return array | |||
*/ | |||
public static function getEntries($limit=50,$offset=0){ | |||
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT.'/data' ); | |||
$logFile=OC_Config::getValue( "logfile", $datadir.'/owncloud.log' ); | |||
$entries=array(); | |||
if(!file_exists($logFile)){ | |||
return array(); | |||
} | |||
$contents=file($logFile); | |||
if(!$contents){//error while reading log | |||
return array(); | |||
} | |||
$end=max(count($contents)-$offset-1,0); | |||
$start=max($end-$limit,0); | |||
for($i=$end;$i>$start;$i--){ | |||
$entries[]=json_decode($contents[$i]); | |||
public static function write($app, $message, $level) { | |||
if (!self::$class) { | |||
self::$class = 'OC_Log_'.ucfirst(OC_Config::getValue('log_type', 'owncloud')); | |||
call_user_func(array(self::$class, 'init')); | |||
} | |||
return $entries; | |||
$log_class=self::$class; | |||
$log_class::write($app, $message, $level); | |||
} | |||
} |
@@ -0,0 +1,78 @@ | |||
<?php | |||
/** | |||
* ownCloud | |||
* | |||
* @author Robin Appelman | |||
* @copyright 2012 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_Owncloud { | |||
/** | |||
* Init class data | |||
*/ | |||
public static function init() { | |||
} | |||
/** | |||
* 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); | |||
} | |||
} | |||
/** | |||
* get entries from the log in reverse chronological order | |||
* @param int limit | |||
* @param int offset | |||
* @return array | |||
*/ | |||
public static function getEntries($limit=50, $offset=0){ | |||
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT.'/data' ); | |||
$logFile=OC_Config::getValue( "logfile", $datadir.'/owncloud.log' ); | |||
$entries=array(); | |||
if(!file_exists($logFile)) { | |||
return array(); | |||
} | |||
$contents=file($logFile); | |||
if(!$contents) {//error while reading log | |||
return array(); | |||
} | |||
$end=max(count($contents)-$offset-1, 0); | |||
$start=max($end-$limit,0); | |||
for($i=$end;$i>$start;$i--) { | |||
$entries[]=json_decode($contents[$i]); | |||
} | |||
return $entries; | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
<?php | |||
/** | |||
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> | |||
* This file is licensed under the Affero General Public License version 3 or | |||
* later. | |||
* See the COPYING-README file. | |||
*/ | |||
class OC_Log_Syslog { | |||
static protected $levels = array( | |||
OC_Log::DEBUG => LOG_DEBUG, | |||
OC_Log::INFO => LOG_INFO, | |||
OC_Log::WARN => LOG_WARNING, | |||
OC_Log::ERROR => LOG_ERR, | |||
OC_Log::FATAL => LOG_CRIT, | |||
); | |||
/** | |||
* Init class data | |||
*/ | |||
public static function init() { | |||
openlog('ownCloud', LOG_PID | LOG_CONS, LOG_USER); | |||
// Close at shutdown | |||
register_shutdown_function('closelog'); | |||
} | |||
/** | |||
* write a message in the log | |||
* @param string $app | |||
* @param string $message | |||
* @param int level | |||
*/ | |||
public static function write($app, $message, $level) { | |||
$syslog_level = self::$levels[$level]; | |||
syslog($syslog_level, '{'.$app.'} '.$message); | |||
} | |||
} |
@@ -13,5 +13,5 @@ OC_JSON::checkAdminUser(); | |||
$count=(isset($_GET['count']))?$_GET['count']:50; | |||
$offset=(isset($_GET['offset']))?$_GET['offset']:0; | |||
$entries=OC_Log::getEntries($count,$offset); | |||
$entries=OC_Log_Owncloud::getEntries($count,$offset); | |||
OC_JSON::success(array("data" => $entries)); |
@@ -28,7 +28,7 @@ OC_Util::addStyle( "settings", "settings" ); | |||
OC_Util::addScript( "settings", "apps" ); | |||
OC_App::setActiveNavigationEntry( "core_log" ); | |||
$entries=OC_Log::getEntries(); | |||
$entries=OC_Log_Owncloud::getEntries(); | |||
OC_Util::addScript('settings','log'); | |||
OC_Util::addStyle('settings','settings'); |