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