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;
+       }
+       
+}


Reply via email to