Hallo...
Ich möchte ein eigenes Error Handling aufziehen. Ich dachte mir daszu eignet sich das Logging von PEAR ganz gut.
So sieht mal meine Klasse aus:
setErrorHandler() ist dazu da, das auch PHP mein logger verwendet. Das funktioniert ja auch.
Jetzt möchte ich in jeder Klasse einen Logger verwenden. Bis jetzt 2 Klassen. Jetzt wenn ein Fehler auftritt, dann loggt jeder Logger. Also der von PHP und die beiden der Klassen. Deshalb wird alles 3x ausgegeben. Ich weiss jedoch nicht was man dagegen unternehmen kann....
Ausgabe:
Kann mir da jemand helfen?
Gruss
X
Ich möchte ein eigenes Error Handling aufziehen. Ich dachte mir daszu eignet sich das Logging von PEAR ganz gut.
So sieht mal meine Klasse aus:
PHP:
class Arena_Logger {
/**
* PHP logger
*
* This Logger is used by PHP to log.
*
* @var Log_composite
*/
private $logger;
/**
* Overrides the PHP error hanlder.
*/
public static function setErrorHandler() {
//logger which prints to the display.
$phpConf = array('error_prepend' => '<font color="#ff0000" size="2pt"><tt>[PHP Error]','error_append' => '</tt></font>');
$phpDisplay = &Log::singleton('display', '', 'PHP',$phpConf,DISPLAY_LOG_LEVEL);
//logger which prints to a file
$phpDile = &Log::singleton('file', LOG_FILE, 'PHP Error',array(), FILE_LOG_LEVEL);
//set up logger composite
$phpLogger = &Log::singleton('composite');
$phpLogger->addChild($phpDisplay);
$phpLogger->addChild($phpFile);
//Override the PHP error handler with our own one.
$errorclass = new Error_Hanlder($phpLogger);
$old_error_handler = set_error_handler(array(&$errorclass, 'errorLogger'));
}
public function __construct($fileName = NULL) {
//logger which prints to the display.
$conf = array('error_prepend' => '<font color="#ff0000" size="2pt"><tt>[' . $fileName . ']','error_append' => '</tt></font>');
$display = &Log::singleton('display', '', WORK_DIR . $fileName,$conf,DISPLAY_LOG_LEVEL);
//logger which prints to a file
$file = &Log::singleton('file', LOG_FILE, WORK_DIR . $fileName,array(), FILE_LOG_LEVEL);
//set up logger composite
$this->logger = &Log::singleton('composite');
$this->logger->addChild($display);
$this->logger->addChild($file);
}
// noch mehr code.
Jetzt möchte ich in jeder Klasse einen Logger verwenden. Bis jetzt 2 Klassen. Jetzt wenn ein Fehler auftritt, dann loggt jeder Logger. Also der von PHP und die beiden der Klassen. Deshalb wird alles 3x ausgegeben. Ich weiss jedoch nicht was man dagegen unternehmen kann....
PHP:
class main {
/**
* bla bla bla
*/
public function __construct() {
//bla bla bla
$this->logger = new Arena_Logger("index.php"); //neuer logger... erster logger
Arena_Logger::setErrorHandler(); //php logger setzen... zweiter logger
PHP:
class Event_Controller {
/**
* bla bla bla
*/
public function __construct($params = "") {
$this->params = $params;
$this->logger = new Arena_Logger("event_controller.php"); //dritter logger...
}
//bla bla bla
include("hahahaha.php"); //hahahaha.php gibts nicht. provozierter fehler.
$this->logger->crit("test"); //Test log...
Ausgabe:
HTML:
<font color="#ff0000" size="2pt"><tt>[index.php]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[PHP Error]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[event_controller.php]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[index.php]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[PHP Error]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[event_controller.php]<b>Warning</b>: Event_Controller::include(hahahaha.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[index.php]<b>Warning</b>: Event_Controller::include() [<a href='function.include'>function.include</a>]: Failed opening 'hahahaha.php' for inclusion (include_path='.:/usr/share/php') in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[PHP Error]<b>Warning</b>: Event_Controller::include() [<a href='function.include'>function.include</a>]: Failed opening 'hahahaha.php' for inclusion (include_path='.:/usr/share/php') in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[event_controller.php]<b>Warning</b>: Event_Controller::include() [<a href='function.include'>function.include</a>]: Failed opening 'hahahaha.php' for inclusion (include_path='.:/usr/share/php') in /www/htdocs/v027867/arena/event_controller.php at line 59</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[index.php]<b>Critical</b>: test</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[PHP Error]<b>Critical</b>: test</tt></font><br />
<font color="#ff0000" size="2pt"><tt>[event_controller.php]<b>Critical</b>: test</tt></font><br />
Kann mir da jemand helfen?
Gruss
X