From: <es...@fh...> - 2010-07-27 13:54:38
|
Author: pcvolkmer Date: Tue Jul 27 15:54:28 2010 New Revision: 5294 Log: Added logging to FirePHP-Plugin Added: trunk/web/common/classes/class.logging.inc.php (with props) Modified: trunk/web/common/classes/class.install.inc.php trunk/web/common/init.inc.php Modified: trunk/web/common/classes/class.install.inc.php ============================================================================== --- trunk/web/common/classes/class.install.inc.php (original) +++ trunk/web/common/classes/class.install.inc.php Tue Jul 27 15:54:28 2010 @@ -675,6 +675,10 @@ fwrite($fd, "// Ausgabe von SQL- und PHP-Fehlern\n"); fwrite($fd, "\$settings['debug'] = true;\n"); fwrite($fd, "\n"); + fwrite($fd, "\n"); + fwrite($fd, "// Print errors via firebug?\n"); + fwrite($fd, "\$settings['debug_firebug'] = false;\n"); + fwrite($fd, "\n"); fclose($fd); return true; } Added: trunk/web/common/classes/class.logging.inc.php ============================================================================== --- trunk/web/common/classes/class.logging.inc.php (added) +++ trunk/web/common/classes/class.logging.inc.php Tue Jul 27 15:54:28 2010 @@ -1,0 +1,62 @@ +<?php +/*--------------------------------------------------------------------------+ +This file is part of eStudy. +common/class.xmllog.inc.php +- Modulgruppe: Framework +- Beschreibung: Klasse zum Erstellen von Logeinträgen +- Version: 2010-07-27 +- Autor(en): Paul-Christian Volkmer <pau...@mn...> ++---------------------------------------------------------------------------+ +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or 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 General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++--------------------------------------------------------------------------*/ + +require_once PATH_TO_ROOT . 'common/register.phar.inc.php'; +require_once 'phar://Zend.phar/Zend/Log.php'; +require_once 'phar://Zend.phar/Zend/Log/Writer/Firebug.php'; +require_once 'phar://Zend.phar/Zend/Controller/Request/Http.php'; +require_once 'phar://Zend.phar/Zend/Controller/Response/Http.php'; + +class Logging { + + const LOGGER_FIREBUG = 1; + const LOGGER_FILE = 2; + + private $logger; + + public static function instance($type) { + return new Logging($type); + } + + private function __construct($type) { + switch ($type) { + case self::LOGGER_FIREBUG: + $writer = new Zend_Log_Writer_Firebug(); + break; + default: + return; + } + $this->logger = new Zend_Log($writer); + } + + public function log($message, $priority) { + $request = new Zend_Controller_Request_Http(); + $response = new Zend_Controller_Response_Http(); + $channel = Zend_Wildfire_Channel_HttpHeaders::getInstance(); + $channel->setRequest($request); + $channel->setResponse($response); + $this->logger->log($message, $priority); + $channel->flush(); + $response->sendHeaders(); + } +} Propchange: trunk/web/common/classes/class.logging.inc.php ------------------------------------------------------------------------------ svn:executable = * Modified: trunk/web/common/init.inc.php ============================================================================== --- trunk/web/common/init.inc.php (original) +++ trunk/web/common/init.inc.php Tue Jul 27 15:54:28 2010 @@ -37,6 +37,11 @@ /**offizielle Versionsnummer des eStudy-Portals*/ define("ESTUDY_VERSION", "4.0 - 01.03.2010"); + +// Globales Logging Objekt +require_once 'classes/class.logging.inc.php'; +global $logging; +$logging = Logging::instance(Logging::LOGGER_FIREBUG); /** * Hilfsfunktion zum Darstellen von Variablen-Typen und -Inhalten * mit var_export() (ähnlich var_dump() bzw. print_r()). @@ -50,6 +55,7 @@ * @param string $errString Auszugebende Fehlermeldung */ function exitErr($errString) { + global $logging; echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="de"> <head> @@ -73,6 +79,7 @@ */ function eStudyErrorHandler($errno, $errstr, $errfile, $errline) { global $oldErrorHandler; + global $logging; static $lasterrno = 0; static $lasterrstr = ''; static $lasterrfile = ''; @@ -122,6 +129,61 @@ } } +/** + * Loggt PHP-Fehler, -Warnungen und -Notices über Firebug + * @param $errno Fehlernummer, siehe http://www.php.net/manual/de/ref.errorfunc.php#errorfunc.constants + * @param $errstr Fehlerbeschreibung + * @param $errfile Datei, in der der Fehler aufgetreten ist + * @param $errline Zeile, in der der Fehler aufgetreten ist + * @return void + */ +function firebugErrorHandler($errno, $errstr, $errfile, $errline) { + global $oldErrorHandler; + global $logging; + static $lasterrno = 0; + static $lasterrstr = ''; + static $lasterrfile = ''; + static $lasterrline = 0; + + if ($errno & E_STRICT) return; + + $message = 'UNDEFINED: '; + $priority = Zend_Log::DEBUG; + if ($errno & (E_RECOVERABLE_ERROR|E_USER_ERROR)) { + $message = "ERROR: "; + $priority = Zend_Log::ERR; + } elseif ($errno & (E_WARNING|E_USER_WARNING)) { + $message = "WARNING: "; + $priority = Zend_Log::WARN; + } elseif ($errno & (E_NOTICE|E_USER_NOTICE)) { + $message = "NOTICE: "; + $priority = Zend_Log::NOTICE; + } elseif ($errno & (E_DEPRECATED|E_USER_DEPRECATED)) { + $message = "DEPRECATED: "; + $priority = Zend_Log::INFO; + } elseif ($errno & (E_STRICT)) { + $message = "STRICT: "; + $priority = Zend_Log::NOTICE; + } + + $message .= '"' . $errstr . '" in: ' + . $errfile + . ' (Line ' . $errline . ')'; + + firebugDebug($message, $priority); +} + +function firebugDebug($message, $priority) { + global $logging; + $logging->log($message, $priority); +} + +function useFirebugDebug() { + require PATH_TO_ROOT . "common/config.inc.php"; + if (isset($settings['debug_firebug']) && $settings['debug_firebug']) return true; + return false; +} + require_once 'constants.inc.php'; // Include RegisterPhar and register libraries to @@ -133,11 +195,16 @@ } /**Konfigurationsdatei mit Einstellungen*/ require_once (PATH_TO_ROOT."common/config.inc.php"); -if ($settings["debug"]) { +if ($settings['debug'] && !useFirebugDebug()) { error_reporting(E_ALL); ini_set('error_prepend_string',"<div class='phpError'><font color=ff0000>"); ini_set('error_prepend_string',"</div>"); -} else { +} +elseif ($settings['debug'] && useFirebugDebug()) { + error_reporting(E_ALL); + $oldErrorHandler = set_error_handler("firebugErrorHandler"); +} +else { $oldErrorHandler = set_error_handler("eStudyErrorHandler"); error_reporting(0); } @@ -145,7 +212,7 @@ /** Datenbankverbindung herstellen (und in 'common/ez_sql.inc.php' Objekt $db erzeugen)*/ require_once (PATH_TO_ROOT."common/ez_sql.inc.php"); // Fehlermeldungen von ezSQL ausschalten -if (!$settings["debug"]) { +if ($settings['debug']) { $db->hide_errors(); } if (mysql_errno()) { |