summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAleksander Machniak <machniak@kolabsys.com>2012-08-07 11:29:56 +0200
committerAleksander Machniak <machniak@kolabsys.com>2012-08-07 11:29:56 +0200
commitc9f97ffed372bfaee1ff3fce3103a5506720efeb (patch)
tree87789eeaf967da2c9e22b9e8b461f7b64bbb3285 /lib
parent8d78b0cc783c273b37a2506d5bacb1470511ec66 (diff)
downloadwebadmin-c9f97ffed372bfaee1ff3fce3103a5506720efeb.tar.gz
Add logging class
Diffstat (limited to 'lib')
-rw-r--r--lib/Auth.php3
-rw-r--r--lib/Log.php205
-rw-r--r--lib/User.php3
-rw-r--r--lib/kolab_api_controller.php15
4 files changed, 213 insertions, 13 deletions
diff --git a/lib/Auth.php b/lib/Auth.php
index 549e046..6129bec 100644
--- a/lib/Auth.php
+++ b/lib/Auth.php
@@ -110,8 +110,7 @@ class Auth {
*/
public function authenticate($username, $password)
{
- // TODO: Log authentication request.
- //console("Authentication request for $username");
+ Log::info("Authentication request for $username");
if (strpos($username, '@')) {
// Case-sensitivity does not matter for strstr() on '@', which
diff --git a/lib/Log.php b/lib/Log.php
new file mode 100644
index 0000000..2ddb99b
--- /dev/null
+++ b/lib/Log.php
@@ -0,0 +1,205 @@
+<?php
+/*
+ +--------------------------------------------------------------------------+
+ | This file is part of the Kolab Web Admin Panel |
+ | |
+ | Copyright (C) 2011-2012, Kolab Systems AG |
+ | |
+ | 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/> |
+ +--------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <machniak@kolabsys.com> |
+ +--------------------------------------------------------------------------+
+*/
+
+/**
+ * Class for logging debug/info/warning/error messages into log file(s)
+ */
+class Log
+{
+ const DEBUG = 8;
+ const INFO = 4;
+ const WARNING = 2;
+ const ERROR = 0;
+
+ private static $mode;
+
+
+ /**
+ * Logs debug message
+ *
+ * @param string $message Log message
+ * @param array $args Additional arguments ('file', 'line')
+ */
+ static function debug($message, $args = array())
+ {
+ if (self::mode() >= self::DEBUG) {
+ self::log_message(self::DEBUG, $message, $args);
+ }
+ }
+
+ /**
+ * Logs information message
+ *
+ * @param string $message Log message
+ * @param array $args Additional arguments ('file', 'line')
+ */
+ static function info($message, $args = array())
+ {
+ if (self::mode() >= self::INFO) {
+ self::log_message(self::INFO, $message, $args);
+ }
+ }
+
+ /**
+ * Logs warning message
+ *
+ * @param string $message Log message
+ * @param array $args Additional arguments ('file', 'line')
+ */
+ static function warning($message, $args = array())
+ {
+ if (self::mode() >= self::WARNING) {
+ self::log_message(self::WARNING, $message, $args);
+ }
+ }
+
+ /**
+ * Logs error message
+ *
+ * @param string $message Log message
+ * @param array $args Additional arguments ('file', 'line')
+ */
+ static function error($message, $args = array())
+ {
+ if (self::mode() >= self::ERROR) {
+ self::log_message(self::ERROR, $message, $args);
+ }
+ }
+
+ /**
+ * Message logger
+ *
+ * @param int $mode Message severity
+ * @param string $message Log message
+ * @param array $args Additional arguments ('file', 'line')
+ */
+ private static function log_message($mode, $message, $args = array())
+ {
+ $conf = Conf::get_instance();
+ $logfile = $conf->get('kolab_wap', 'log_file');
+
+ // if log_file is configured all logs will go to it
+ // otherwise use separate file for info/debug and warning/error
+ if (!$logfile) {
+ switch ($mode) {
+ case self::DEBUG:
+ case self::INFO:
+ $file = 'console';
+ break;
+ case self::WARNING:
+ case self::ERROR:
+ $file = 'errors';
+ break;
+ }
+
+ $logfile = dirname(__FILE__) . '/../logs/' . $file;
+ }
+
+ switch ($mode) {
+ case self::DEBUG:
+ $prefix = 'DEBUG';
+ break;
+ case self::INFO:
+ $prefix = 'INFO';
+ break;
+ case self::WARNING:
+ $prefix = 'WARNING';
+ break;
+ case self::ERROR:
+ $prefix = 'ERROR';
+ break;
+ }
+
+ if (!is_string($message)) {
+ $message = var_export($message, true);
+ }
+
+ $date = date('d-M-Y H:i:s O');
+ $sess_id = session_id();
+ $logline = sprintf("[%s]%s: [%s] %s\n",
+ $date, $sess_id ? "($sess_id)" : '', $prefix, $message);
+
+ if (!empty($args)) {
+ if ($args['file']) {
+ $logline .= ' in ' . $args['file'];
+ }
+ if ($args['line']) {
+ $logline .= ' on line ' . intval($args['line']);
+ }
+ }
+
+ if ($fp = @fopen($logfile, 'a')) {
+ fwrite($fp, $logline);
+ fflush($fp);
+ fclose($fp);
+ return;
+ }
+
+ if ($mode == self::ERROR) {
+ // send error to PHPs error handler if write to file didn't succeed
+ trigger_error($message, E_USER_ERROR);
+ }
+ }
+
+ /**
+ * Returns configured logging mode
+ *
+ * @return int Logging mode
+ */
+ static function mode()
+ {
+ if (isset(self::$mode)) {
+ return self::$mode;
+ }
+
+ $conf = Conf::get_instance();
+ $mode = $conf->get('kolab_wap', 'debug_mode');
+
+ switch ($mode) {
+ case self::DEBUG:
+ case 'debug':
+ case 'DEBUG':
+ self::$mode = self::DEBUG;
+ break;
+
+ case self::INFO:
+ case 'info':
+ case 'INFO':
+ self::$mode = self::INFO;
+ break;
+
+ case self::WARNING:
+ case 'warning':
+ case 'WARNING':
+ self::$mode = self::WARNING;
+ break;
+
+ case self::ERROR:
+ default:
+ self::$mode = self::ERROR;
+ }
+
+ return self::$mode;
+ }
+}
diff --git a/lib/User.php b/lib/User.php
index e0a2076..e7905cc 100644
--- a/lib/User.php
+++ b/lib/User.php
@@ -110,9 +110,6 @@ class User
public function groups()
{
- //console("Called " . __FUNCTION__ . " on line " . __LINE__ . " of " . __FILE__);
- //debug_print_backtrace();
-
if ($this->_groups || (is_array($this->_groups) && count($this->_groups) >= 1)) {
return $this->_groups;
}
diff --git a/lib/kolab_api_controller.php b/lib/kolab_api_controller.php
index bdbc707..e0dbf8b 100644
--- a/lib/kolab_api_controller.php
+++ b/lib/kolab_api_controller.php
@@ -79,7 +79,7 @@ class kolab_api_controller
public function add_service($service, $handler)
{
if ($this->services[$service]) {
- //console("Service $service is already registered.");
+ Log::warning("Service $service is already registered");
return false;
}
@@ -91,7 +91,7 @@ class kolab_api_controller
*/
public function get_service($service)
{
- //console("Obtaining service $service");
+ Log::debug("Obtaining service: $service");
// we are the system!
if ($service == 'system') {
@@ -108,8 +108,6 @@ class kolab_api_controller
}
}
- //console("Unknown service $service");
-
throw new Exception("Unknown service", 400);
}
@@ -140,7 +138,7 @@ class kolab_api_controller
$method = $this->request['method'];
$postdata = @json_decode($postdata, true);
- //console("Calling method " . $method . " on service " . $service);
+ Log::debug("Calling $service.$method");
// validate user session
if ($service != 'system' || $method != 'authenticate') {
@@ -188,7 +186,7 @@ class kolab_api_controller
$method = $this->request['method'];
$url = rtrim($url, '/') . '/' . $service . '.' . $method;
- //console("Proxying " . $url);
+ Log::debug("Proxying: $url");
$request = new HTTP_Request2();
$url = new Net_URL2($url);
@@ -272,7 +270,7 @@ class kolab_api_controller
*/
private function authenticate($request, $postdata)
{
- //console("Authenticating with postdata", $postdata);
+ Log::debug("Authenticating with postdata: " . json_encode($postdata));
$valid = false;
@@ -306,7 +304,8 @@ class kolab_api_controller
*/
private function capabilities()
{
- //console("system.capabilities called");
+ Log::debug("system.capabilities called");
+
$auth = Auth::get_instance();
$this->domains = $auth->list_domains();