You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4php-dev@logging.apache.org by ku...@apache.org on 2009/05/05 12:09:32 UTC

svn commit: r771651 - in /incubator/log4php/trunk/src/main/php: LoggerManager.php configurators/ configurators/LoggerConfiguratorPhp.php

Author: kurdalen
Date: Tue May  5 10:09:31 2009
New Revision: 771651

URL: http://svn.apache.org/viewvc?rev=771651&view=rev
Log:
initial version of LoggerConfiguratorPhp #LOG4PHP-36

Added:
    incubator/log4php/trunk/src/main/php/configurators/
    incubator/log4php/trunk/src/main/php/configurators/LoggerConfiguratorPhp.php
Modified:
    incubator/log4php/trunk/src/main/php/LoggerManager.php

Modified: incubator/log4php/trunk/src/main/php/LoggerManager.php
URL: http://svn.apache.org/viewvc/incubator/log4php/trunk/src/main/php/LoggerManager.php?rev=771651&r1=771650&r2=771651&view=diff
==============================================================================
--- incubator/log4php/trunk/src/main/php/LoggerManager.php (original)
+++ incubator/log4php/trunk/src/main/php/LoggerManager.php Tue May  5 10:09:31 2009
@@ -56,6 +56,7 @@
 		// 'LoggerLog' => '/LoggerLog.php',
 		'LoggerMDC' => '/LoggerMDC.php',
 		'LoggerNDC' => '/LoggerNDC.php',
+		'LoggerConfiguratorPhp' => '/configurators/LoggerConfiguratorPhp.php',
 		'LoggerPropertyConfigurator' => '/LoggerPropertyConfigurator.php',
 		'LoggerRoot' => '/LoggerRoot.php',
 		'LoggerAppenderAdodb' => '/appenders/LoggerAppenderAdodb.php',

Added: incubator/log4php/trunk/src/main/php/configurators/LoggerConfiguratorPhp.php
URL: http://svn.apache.org/viewvc/incubator/log4php/trunk/src/main/php/configurators/LoggerConfiguratorPhp.php?rev=771651&view=auto
==============================================================================
--- incubator/log4php/trunk/src/main/php/configurators/LoggerConfiguratorPhp.php (added)
+++ incubator/log4php/trunk/src/main/php/configurators/LoggerConfiguratorPhp.php Tue May  5 10:09:31 2009
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *	   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * 
+ * @package log4php
+ * @subpackage configurators
+ */
+
+/**
+ * LoggerConfiguratorPhp class
+ *
+ * This class allows configuration of log4php through an external file that 
+ * deliver a PHP array in return.
+ *
+ * Example:
+ * <code>
+ * <?php
+ * return array(
+ *     'threshold' => 'ALL',
+ *     'rootLogger' => array(
+ *        'level' => 'INFO',
+ *        'appenders' => array('default'),
+ *     ),
+ *     'loggers' => array(
+ *         'dev' => array(
+ *             'level' => 'DEBUG',
+ *             'appenders' => array('default'),
+ *         ),
+ *     ),
+ *     'appenders' => array(
+ *         'default' => array(
+ *             'class' => 'LoggerAppenderEcho',
+ *             'layout' => array(
+ *                 'class' => 'LoggerPatternLayout',
+ *                 'conversionPattern' => "%d{Y-m-d H:i:s} %-5p %c %X{username}: %m in %F at %L%n",
+ *             ),
+ *         ),
+ *     ),
+ * );
+ * </code>
+ *
+ * @package log4php
+ * @subpackage configurators
+ * @since 2.0
+ */
+class LoggerConfiguratorPhp implements LoggerConfigurator {
+	
+	public static function configure($url = '') {
+		$configurator = new self();
+		$hierarchy = LoggerManager::getLoggerRepository();
+		return $configurator->doConfigure($url, $hierarchy);
+	}
+	
+	public function doConfigure($url, &$hierarchy) {
+		
+		$config = require $url;
+		
+		// set threshold
+		if(isset($config['threshold'])) {
+			$hierarchy->setThreshold(LoggerOptionConverter::toLevel($thresholdStr, LoggerLevel::getLevelAll()));
+		}
+		
+		// parse and create appenders
+		if(isset($config['appenders'])) {
+			
+			foreach($config['appenders'] as $appenderName => $appenderProperties) {
+				
+				$appender = LoggerAppender::singleton($appenderName, $appenderProperties['class']);
+				
+				if($appender->requiresLayout()) {
+					
+					if(isset($appenderProperties['layout'])) {
+						
+						if(isset($appenderProperties['layout']['class']) and !empty($appenderProperties['layout']['class'])) {
+							$layoutClass = $appenderProperties['layout']['class'];							
+						} else {
+							$layoutClass = 'LoggerLayoutSimple';
+						}
+						
+						$layout = LoggerLayout::factory($layoutClass);
+						if($layout === null) {
+							$layout = LoggerLayout::factory('LoggerLayoutSimple');
+						}
+						
+						if($layout instanceof LoggerPatternLayout) {
+							$layout->setConversionPattern($appenderProperties['layout']['conversionPattern']);
+						}
+						
+						$appender->setLayout($layout);
+						
+					} else {
+						// TODO: throw exception?
+					}
+					
+				}
+				
+			}
+			
+		}
+		
+		// parse and create root logger
+		if(isset($config['rootLogger'])) {
+			$rootLogger = $hierarchy->getRootLogger();
+			if(isset($config['rootLogger']['level'])) {
+				$rootLogger->setLevel(LoggerOptionConverter::toLevel($config['rootLogger']['level'], LoggerLevel::getLevelDebug()));
+				if(isset($config['rootLogger']['appenders'])) {
+					foreach($config['rootLogger']['appenders'] as $appenderName) {
+						$appender = LoggerAppender::singleton($appenderName);
+						if($appender !== null) {
+							$rootLogger->addAppender($appender);
+						}
+					}
+				}	
+			}
+		}
+		
+		// parse and create loggers
+		if(isset($config['loggers'])) {
+			foreach($config['loggers'] as $loggerName => $loggerProperties) {
+				if(is_string($loggerName)) {
+					$logger = $hierarchy->getLogger($loggerName);
+					
+					if(isset($loggerProperties['level'])) {
+						$logger->setLevel(LoggerOptionConverter::toLevel($loggerProperties['level'], LoggerLevel::getLevelDebug()));
+						if(isset($loggerProperties['appenders'])) {
+							foreach($loggerProperties['appenders'] as $appenderName) {
+								$appender = LoggerAppender::singleton($appenderName);
+								if($appender !== null) {
+									$logger->addAppender($appender);
+								}
+							}
+						}	
+					}
+				} else {
+					// TODO: throw exception
+				}
+			}
+		}
+		
+		return true;
+	}
+	
+}