You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2005/01/18 19:35:09 UTC

svn commit: r125525 - /cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java

Author: cziegeler
Date: Tue Jan 18 10:35:07 2005
New Revision: 125525

URL: http://svn.apache.org/viewcvs?view=rev&rev=125525
Log:
Provide include functionality for logging helper
Modified:
   cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java   (contents, props changed)

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java?view=diff&rev=125525&p1=cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java&r1=125524&p2=cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java&r2=125525
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java	(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java	Tue Jan 18 10:35:07 2005
@@ -15,11 +15,18 @@
  */
 package org.apache.cocoon.components.container;
 
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+
 import org.apache.avalon.excalibur.logger.Log4JLoggerManager;
 import org.apache.avalon.excalibur.logger.LogKitLoggerManager;
 import org.apache.avalon.excalibur.logger.LoggerManager;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.context.Context;
 import org.apache.avalon.framework.logger.LogKitLogger;
@@ -30,6 +37,7 @@
 import org.apache.cocoon.util.log.Log4JConfigurator;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
+import org.apache.excalibur.source.TraversableSource;
 import org.apache.log.ErrorHandler;
 import org.apache.log.Hierarchy;
 import org.apache.log.LogTarget;
@@ -43,6 +51,9 @@
 */
 public class LoggingHelper {
     
+    /** Parameter map for the context protocol */
+    protected static final Map CONTEXT_PARAMETERS = Collections.singletonMap("force-traversable", Boolean.TRUE);
+
     protected final Settings settings;
     protected Logger log;
     protected LoggerManager loggerManager;
@@ -100,6 +111,34 @@
                     source = this.resolver.resolveURI(logkitConfig);
                     final ConfigurationBuilder builder = new ConfigurationBuilder();
                     final Configuration conf = builder.build(source.getInputStream());
+                    final Configuration[] children = conf.getChildren("include");
+                    for(int i=0; i<children.length; i++) {
+                        String directoryURI = children[i].getAttribute("dir");                    
+                        final String ending = children[i].getAttribute("postfix", null);
+                        Source directory = null;
+                        try {
+                            directory = this.resolver.resolveURI(directoryURI, source.getURI(), CONTEXT_PARAMETERS);
+                            if ( directory instanceof TraversableSource ) {
+                                final Iterator c = ((TraversableSource)directory).getChildren().iterator();
+                                while ( c.hasNext() ) {
+                                    final Source s = (Source)c.next();
+                                    if ( ending == null || s.getURI().endsWith(ending) ) {
+                                        final Configuration includeConf = builder.build(s.getInputStream());
+                                        ((DefaultConfiguration)conf).addAllChildren(includeConf);
+                                    }
+                                }
+                            } else {
+                                throw new ConfigurationException("Include.dir must point to a directory, '" + directory.getURI() + "' is not a directory.'");
+                            }
+                        } catch (IOException ioe) {
+                            throw new ConfigurationException("Unable to read configurations from " + directoryURI);
+                        } finally {
+                            this.resolver.release(directory);
+                        }
+                        
+                        // finally remove include
+                        ((DefaultConfiguration)conf).removeChild(children[i]);
+                    }
                     ContainerUtil.configure(loggerManager, conf);
                 } finally {
                     this.resolver.release(source);
@@ -147,9 +186,10 @@
     /**
      * @return Returns the log.
      */
-    public Logger getLog() {
+    public Logger getLogger() {
         return this.log;
     }
+    
     /**
      * @return Returns the loggerManager.
      */