00001 <?php
00002
00003 lt_include( PLOG_CLASS_PATH."class/logger/logger/logger.class.php" );
00004 lt_include( PLOG_CLASS_PATH."class/logger/config/loggerconfigloader.class.php" );
00005 lt_include( PLOG_CLASS_PATH."class/logger/layout/patternlayout.class.php" );
00006
00076 class LoggerManager
00077 {
00081 var $loggers;
00082
00087 function LoggerManager()
00088 {
00089 $this->loggers = array();
00090
00091 $this->_loadLoggerConfig();
00092 }
00093
00098 function _loadLoggerConfig()
00099 {
00100
00101 $config = new LoggerConfigLoader();
00102 $loggers = $config->getConfiguredLoggers();
00103
00104 if( count($loggers) == 0 ) {
00105
00106 $loggers["default"] = Array( "layout" => "%d %N - [%f:%l (%c:%F)] %m%n",
00107 "appender" => "stdout",
00108 "prio" => "debug" );
00109 }
00110
00111
00112 foreach( $config->getConfiguredLoggers() as $logger ) {
00113
00114 $properties = $config->getLoggerProperties( $logger );
00115
00116
00117 $layout = new PatternLayout( $config->getLoggerLayout( $logger ));
00118 $appenderObject = $this->createAppenderInstance( $config->getLoggerAppender( $logger ),
00119 $layout, $properties );
00120
00121
00122 $loggerObject = new Logger( $properties );
00123 $loggerObject->addAppender( $appenderObject );
00124 $this->addLogger( $logger, $loggerObject );
00125 }
00126 }
00127
00134 function createAppenderInstance( $appender, $layout, $properties )
00135 {
00136 $appenderClassName = $appender."appender";
00137 $appenderClassFile = PLOG_CLASS_PATH."class/logger/appender/".$appenderClassName.".class.php";
00138
00139
00140 if( !File::isReadable( $appenderClassFile )) {
00141 throw( new Exception( "Cannot find an appender suitable for appender type '$appender'" ));
00142 die();
00143 }
00144
00145
00146 lt_include( $appenderClassFile );
00147 $appender = new $appenderClassName( $layout, $properties );
00148
00149 return( $appender );
00150 }
00151
00160 function addLogger ($name, $logger)
00161 {
00162 if (isset($this->loggers[$name])) {
00163 throw(new Exception("LogManager::addLogger: LogManager already contains logger " . $name));
00164 die();
00165 }
00166
00167 $this->loggers[$name] = $logger;
00168
00169 return;
00170 }
00171
00177 function &getInstance()
00178 {
00179 static $instance = NULL;
00180
00181 if ($instance === NULL) {
00182 $instance = new LoggerManager();
00183 }
00184
00185 return $instance;
00186 }
00187
00195 function &getLogger ($name = "default")
00196 {
00197 $instance =& LoggerManager::getInstance();
00198
00199 if (isset($instance->loggers[$name])) {
00200 return $instance->loggers[$name];
00201 }
00202
00203 return NULL;
00204 }
00205 }
00206 ?>