]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add support for logging to syslog
authorBart Visscher <bartv@thisnet.nl>
Fri, 30 Mar 2012 21:15:48 +0000 (23:15 +0200)
committerBart Visscher <bartv@thisnet.nl>
Fri, 30 Mar 2012 21:41:53 +0000 (23:41 +0200)
lib/log.php
lib/log/owncloud.php [new file with mode: 0644]
lib/log/syslog.php [new file with mode: 0644]
settings/ajax/getlog.php
settings/log.php

index 4e450a027f5367289a2cc67697f3d9c7b00e4886..8bb2839be66a36686539348fbfb913bbd16c361e 100644 (file)
@@ -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);
        }
 }
diff --git a/lib/log/owncloud.php b/lib/log/owncloud.php
new file mode 100644 (file)
index 0000000..6df346e
--- /dev/null
@@ -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;
+       }
+}
diff --git a/lib/log/syslog.php b/lib/log/syslog.php
new file mode 100644 (file)
index 0000000..d1fb28d
--- /dev/null
@@ -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);
+       }
+}
index 600ebefcecef77d5f5ae8c9184ec964d4b60f9b1..ed48b2cae1ad14af1f4cfdb8e6b02375ed590832 100644 (file)
@@ -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));
index 946f2b6f8e5678b428b326cf021dcac1842c4b1a..ddbf72c4433c2f08270fd2b127c12eef3ea38ba5 100644 (file)
@@ -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');