Author: cziegeler Date: Tue Jan 18 12:57:21 2005 New Revision: 125544 URL: http://svn.apache.org/viewcvs?view=rev&rev=125544 Log: Add include for logkit configuration - no more patches Added: cocoon/trunk/src/blocks/apples/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/apples/WEB-INF/logkitconf/apples.logkit cocoon/trunk/src/blocks/cron/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/cron/WEB-INF/logkitconf/cron.logkit cocoon/trunk/src/blocks/forms/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/forms/WEB-INF/logkitconf/forms.logkit cocoon/trunk/src/blocks/portal/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/portal/WEB-INF/logkitconf/portal.logkit cocoon/trunk/src/blocks/slide/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/slide/WEB-INF/logkitconf/slide.logkit cocoon/trunk/src/blocks/woody/WEB-INF/logkitconf/ cocoon/trunk/src/blocks/woody/WEB-INF/logkitconf/woody.logkit cocoon/trunk/src/java/org/apache/cocoon/servlet/SettingsHelper.java (contents, props changed) cocoon/trunk/src/webapp/WEB-INF/logkitconf/ cocoon/trunk/src/webapp/WEB-INF/logkitconf/core.logkit Removed: cocoon/trunk/src/blocks/apples/conf/apples-category.xlog cocoon/trunk/src/blocks/apples/conf/apples-target.xlog cocoon/trunk/src/blocks/cron/conf/cron-category.xlog cocoon/trunk/src/blocks/cron/conf/cron-target.xlog cocoon/trunk/src/blocks/forms/conf/forms-category.xlog cocoon/trunk/src/blocks/forms/conf/forms-target.xlog cocoon/trunk/src/blocks/portal/conf/portal-category.xlog cocoon/trunk/src/blocks/portal/conf/portal-target.xlog cocoon/trunk/src/blocks/slide/conf/slide-category.xlog cocoon/trunk/src/blocks/slide/conf/slide-target.xlog cocoon/trunk/src/blocks/woody/conf/woody-category.xlog cocoon/trunk/src/blocks/woody/conf/woody-target.xlog Modified: cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java cocoon/trunk/src/webapp/WEB-INF/logkit.xconf cocoon/trunk/tools/src/blocks-build.xsl
Added: cocoon/trunk/src/blocks/apples/WEB-INF/logkitconf/apples.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/apples/WEB-INF/logkitconf/apples.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/apples/WEB-INF/logkitconf/apples.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="apples"> + <filename>${context-root}/WEB-INF/logs/apples.log</filename> + + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] (%{uri}) %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>false</append> + </cocoon> + </targets> + <categories> + <category log-level="ERROR" name="apples"> + <log-target id-ref="apples" /> + <log-target id-ref="error" /> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/apples/conf/apples-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/apples/conf/apples-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/apples/conf/apples-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/apples/conf/apples-target.xlog?view=auto&rev=125543 ============================================================================== Added: cocoon/trunk/src/blocks/cron/WEB-INF/logkitconf/cron.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/cron/WEB-INF/logkitconf/cron.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/cron/WEB-INF/logkitconf/cron.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="cron"> + <filename>${context-root}/WEB-INF/logs/cron.log</filename> + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>true</append> + </cocoon> + </targets> + <categories> + <category log-level="INFO" name="cron"> + <log-target id-ref="cron" /> + <log-target id-ref="error"/> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/cron/conf/cron-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/cron/conf/cron-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/cron/conf/cron-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/cron/conf/cron-target.xlog?view=auto&rev=125543 ============================================================================== Added: cocoon/trunk/src/blocks/forms/WEB-INF/logkitconf/forms.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/WEB-INF/logkitconf/forms.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/forms/WEB-INF/logkitconf/forms.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="forms"> + <filename>${context-root}/WEB-INF/logs/forms.log</filename> + + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] (%{uri}) %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>false</append> + </cocoon> + </targets> + <categories> + <category log-level="ERROR" name="forms"> + <log-target id-ref="forms" /> + <log-target id-ref="error"/> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/forms/conf/forms-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/conf/forms-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/forms/conf/forms-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/conf/forms-target.xlog?view=auto&rev=125543 ============================================================================== Added: cocoon/trunk/src/blocks/portal/WEB-INF/logkitconf/portal.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/WEB-INF/logkitconf/portal.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/WEB-INF/logkitconf/portal.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="portal"> + <filename>${context-root}/WEB-INF/logs/portal.log</filename> + + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] (%{uri}) %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>false</append> + </cocoon> + </targets> + <categories> + <category log-level="ERROR" name="portal"> + <log-target id-ref="portal" /> + <log-target id-ref="error"/> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/portal/conf/portal-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/conf/portal-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/portal/conf/portal-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/conf/portal-target.xlog?view=auto&rev=125543 ============================================================================== Added: cocoon/trunk/src/blocks/slide/WEB-INF/logkitconf/slide.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/slide/WEB-INF/logkitconf/slide.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/slide/WEB-INF/logkitconf/slide.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="slide"> + <filename>${context-root}/WEB-INF/logs/slide.log</filename> + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] (%{uri}) %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>false</append> + </cocoon> + </targets> + <categories> + <category name="slide" log-level="INFO"> + <log-target id-ref="slide"/> + <log-target id-ref="error"/> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/slide/conf/slide-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/slide/conf/slide-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/slide/conf/slide-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/slide/conf/slide-target.xlog?view=auto&rev=125543 ============================================================================== Added: cocoon/trunk/src/blocks/woody/WEB-INF/logkitconf/woody.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/woody/WEB-INF/logkitconf/woody.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/woody/WEB-INF/logkitconf/woody.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed 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. +--> +<!--+ + | + | SVN $Id: cocoon-apples.xconf 125443 2005-01-17 20:39:52Z cziegeler $ + +--> +<logkit> + <targets> + <cocoon id="woody"> + <filename>${context-root}/WEB-INF/logs/woody.log</filename> + + <format type="cocoon"> + %7.7{priority} %{time} [%{category}] (%{uri}) %{thread}/%{class:short}: %{message}\n%{throwable} + </format> + <append>false</append> + </cocoon> + </targets> + <categories> + <category log-level="ERROR" name="woody"> + <log-target id-ref="woody" /> + <log-target id-ref="error"/> + </category> + </categories> +</logkit> \ No newline at end of file Deleted: /cocoon/trunk/src/blocks/woody/conf/woody-category.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/woody/conf/woody-category.xlog?view=auto&rev=125543 ============================================================================== Deleted: /cocoon/trunk/src/blocks/woody/conf/woody-target.xlog Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/woody/conf/woody-target.xlog?view=auto&rev=125543 ============================================================================== Modified: cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java?view=diff&rev=125544&p1=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java&r1=125543&p2=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java&r2=125544 ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java Tue Jan 18 12:57:21 2005 @@ -95,10 +95,17 @@ private Locator locator; private final NamespaceSupport namespaceSupport = new NamespaceSupport(); + private final boolean processIncludes; + /** * Create a Configuration Builder */ public ConfigurationBuilder() { + this(false); + } + + public ConfigurationBuilder(boolean processIncludes) { + this.processIncludes = processIncludes; try { final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); Modified: cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java?view=diff&rev=125544&p1=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java&r1=125543&p2=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java&r2=125544 ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java Tue Jan 18 12:57:21 2005 @@ -29,6 +29,7 @@ protected String configuration; protected String loggingConfiguration; protected String cocoonLogger; + protected String servletLogger; protected String logLevel; protected String loggerClassName; protected boolean allowReload; @@ -335,5 +336,18 @@ return defaultValue; } return property; + } + + /** + * @return Returns the servletLogger. + */ + public String getServletLogger() { + return this.servletLogger; + } + /** + * @param servletLogger The servletLogger to set. + */ + public void setServletLogger(String servletLogger) { + this.servletLogger = servletLogger; } } 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=125544&p1=cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java&r1=125543&p2=cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java&r2=125544 ============================================================================== --- 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 12:57:21 2005 @@ -23,20 +23,22 @@ 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.CascadingRuntimeException; 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.context.ContextException; +import org.apache.avalon.framework.context.DefaultContext; import org.apache.avalon.framework.logger.LogKitLogger; import org.apache.avalon.framework.logger.Logger; import org.apache.cocoon.configuration.ConfigurationBuilder; import org.apache.cocoon.configuration.Settings; -import org.apache.cocoon.util.log.CocoonLogFormatter; +import org.apache.cocoon.core.source.SimpleSourceResolver; 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; @@ -54,16 +56,9 @@ /** 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; - protected final SourceResolver resolver; - public LoggingHelper(Settings settings, SourceResolver resolver) { - this.settings = settings; - this.resolver = resolver; - } - /** * Set up the log level and path. The default log level is * Priority.ERROR, although it can be overwritten by the parameter @@ -74,24 +69,43 @@ * (Priority.DEBUG and above) as you want that get routed to the * file. */ - protected void initLogger(LogTarget defaultTarget, Context context) { - final String logLevel = this.settings.get(this.settings.getLogLevel(), "INFO"); + public LoggingHelper(Settings settings, + LogTarget defaultTarget, + Context context) { + final String logLevel = settings.get(settings.getLogLevel(), "INFO"); - final String accesslogger = this.settings.get(this.settings.getCocoonLogger(), "cocoon"); + final String accesslogger = settings.get(settings.getServletLogger(), "cocoon"); final Priority logPriority = Priority.getPriorityForName(logLevel); - final CocoonLogFormatter formatter = new CocoonLogFormatter(); - formatter.setFormat("%7.7{priority} %{time} [%8.8{category}] " + - "(%{uri}) %{thread}/%{class:short}: %{message}\\n%{throwable}"); final Hierarchy defaultHierarchy = Hierarchy.getDefaultHierarchy(); final ErrorHandler errorHandler = new DefaultErrorHandler(); defaultHierarchy.setErrorHandler(errorHandler); defaultHierarchy.setDefaultLogTarget(defaultTarget); defaultHierarchy.setDefaultPriority(logPriority); final Logger logger = new LogKitLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("")); + + // we can't pass the context-root to our resolver + Object value = null; + try { + value = context.get("context-root"); + ((DefaultContext)context).put("context-root", null); + } catch ( ContextException ignore ) { + // not available + } + // Create our own resolver + SimpleSourceResolver resolver = new SimpleSourceResolver(); + resolver.enableLogging(logger); + try { + resolver.contextualize(context); + } catch (ContextException ce) { + throw new CascadingRuntimeException("Cannot setup source resolver.", ce); + } + if ( value != null ) { + ((DefaultContext)context).put("context-root", value); + } final String loggerManagerClass = - this.settings.get(this.settings.getLoggerClassName(), LogKitLoggerManager.class.getName()); + settings.get(settings.getLoggerClassName(), LogKitLoggerManager.class.getName()); // the log4j support requires currently that the log4j system is already configured elsewhere @@ -104,27 +118,33 @@ if (loggerManager instanceof Configurable) { //Configure the logkit management - String logkitConfig = this.settings.get(this.settings.getLoggingConfiguration(), "/WEB-INF/logkit.xconf"); + String logkitConfig = settings.get(settings.getLoggingConfiguration(), "/WEB-INF/logkit.xconf"); Source source = null; try { - source = this.resolver.resolveURI(logkitConfig); + source = resolver.resolveURI(logkitConfig); final ConfigurationBuilder builder = new ConfigurationBuilder(); final Configuration conf = builder.build(source.getInputStream()); + final DefaultConfiguration categories = (DefaultConfiguration)conf.getChild("categories"); + final DefaultConfiguration targets = (DefaultConfiguration)conf.getChild("targets"); + + // now process includes 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); + directory = 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); + // add targets and categories + categories.addAllChildren(includeConf.getChild("categories")); + targets.addAllChildren(includeConf.getChild("targets")); } } } else { @@ -133,7 +153,7 @@ } catch (IOException ioe) { throw new ConfigurationException("Unable to read configurations from " + directoryURI); } finally { - this.resolver.release(directory); + resolver.release(directory); } // finally remove include @@ -141,21 +161,21 @@ } ContainerUtil.configure(loggerManager, conf); } finally { - this.resolver.release(source); + resolver.release(source); } } // let's configure log4j - final String log4jConfig = this.settings.getLog4jConfiguration(); + final String log4jConfig = settings.getLog4jConfiguration(); if ( log4jConfig != null ) { final Log4JConfigurator configurator = new Log4JConfigurator(context); Source source = null; try { - source = this.resolver.resolveURI(log4jConfig); + source = resolver.resolveURI(log4jConfig); configurator.doConfigure(source.getInputStream(), LogManager.getLoggerRepository()); } finally { - this.resolver.release(source); + resolver.release(source); } } @@ -167,7 +187,8 @@ this.log = this.loggerManager.getLoggerForCategory(accesslogger); } - private LoggerManager newLoggerManager(String loggerManagerClass, Hierarchy hierarchy) { + private LoggerManager newLoggerManager(String loggerManagerClass, + Hierarchy hierarchy) { if (loggerManagerClass.equals(LogKitLoggerManager.class.getName())) { return new LogKitLoggerManager(hierarchy); } else if (loggerManagerClass.equals(Log4JLoggerManager.class.getName()) || Modified: cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java?view=diff&rev=125544&p1=cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java&r1=125543&p2=cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java&r2=125544 ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java Tue Jan 18 12:57:21 2005 @@ -15,26 +15,47 @@ */ package org.apache.cocoon.servlet; -import org.apache.avalon.excalibur.logger.Log4JLoggerManager; -import org.apache.avalon.excalibur.logger.LogKitLoggerManager; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Constructor; +import java.net.MalformedURLException; +import java.net.SocketException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + 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.DefaultConfigurationBuilder; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.context.DefaultContext; -import org.apache.avalon.framework.logger.LogKitLogger; import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.service.ServiceManager; - import org.apache.cocoon.Cocoon; import org.apache.cocoon.ConnectionResetException; import org.apache.cocoon.Constants; import org.apache.cocoon.ResourceNotFoundException; import org.apache.cocoon.components.ContextHelper; +import org.apache.cocoon.components.container.LoggingHelper; import org.apache.cocoon.components.notification.DefaultNotifyingBuilder; import org.apache.cocoon.components.notification.Notifier; import org.apache.cocoon.components.notification.Notifying; +import org.apache.cocoon.configuration.Settings; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.http.HttpContext; import org.apache.cocoon.environment.http.HttpEnvironment; @@ -44,43 +65,10 @@ import org.apache.cocoon.util.IOUtils; import org.apache.cocoon.util.StringUtils; import org.apache.cocoon.util.log.CocoonLogFormatter; -import org.apache.cocoon.util.log.Log4JConfigurator; - import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.SystemUtils; import org.apache.log.ContextMap; -import org.apache.log.ErrorHandler; -import org.apache.log.Hierarchy; -import org.apache.log.Priority; import org.apache.log.output.ServletOutputLogTarget; -import org.apache.log.util.DefaultErrorHandler; -import org.apache.log4j.LogManager; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.Constructor; -import java.net.MalformedURLException; -import java.net.SocketException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; -import java.util.jar.Attributes; -import java.util.jar.Manifest; /** * This is the entry point for Cocoon execution as an HTTP Servlet. @@ -291,13 +279,10 @@ this.workDir.mkdirs(); this.appContext.put(Constants.CONTEXT_WORK_DIR, workDir); - // Init logger - initLogger(); - String path = this.servletContextPath; - if (getLogger().isDebugEnabled()) { +/* if (getLogger().isDebugEnabled()) { getLogger().debug("getRealPath for /: " + path); - } + }*/ if (path == null) { // Try to figure out the path of the root from that of WEB-INF try { @@ -305,15 +290,14 @@ } catch (MalformedURLException me) { throw new ServletException("Unable to get resource 'WEB-INF'.", me); } - if (getLogger().isDebugEnabled()) { + /* if (getLogger().isDebugEnabled()) { getLogger().debug("getResource for /WEB-INF: " + path); - } + }*/ path = path.substring(0, path.length() - "WEB-INF".length()); - if (getLogger().isDebugEnabled()) { + /*if (getLogger().isDebugEnabled()) { getLogger().debug("Path for Root: " + path); - } + }*/ } - try { if (path.indexOf(':') > 1) { this.servletContextURL = path; @@ -330,6 +314,10 @@ throw new ServletException("Unable to determine servlet context URL.", me); } } + this.appContext.put(ContextHelper.CONTEXT_ROOT_URL, this.servletContextURL); + + // Init logger + initLogger(); this.forceLoadParameter = getInitParameter("load-class", null); this.forceSystemProperty = getInitParameter("force-property", null); @@ -343,7 +331,6 @@ getLogger().debug("Using default work-directory " + this.workDir); } } - this.appContext.put(ContextHelper.CONTEXT_ROOT_URL, this.servletContextURL); final String uploadDirParam = conf.getInitParameter("upload-directory"); if (uploadDirParam != null) { @@ -730,120 +717,31 @@ return ""; } - /** - * Set up the log level and path. The default log level is - * Priority.ERROR, although it can be overwritten by the parameter - * "log-level". The log system goes to both a file and the Servlet - * container's log system. Only messages that are Priority.ERROR - * and above go to the servlet context. The log messages can - * be as restrictive (Priority.FATAL_ERROR and above) or as liberal - * (Priority.DEBUG and above) as you want that get routed to the - * file. - */ protected void initLogger() { - final String logLevel = getInitParameter("log-level", "INFO"); - - final String accesslogger = getInitParameter("servlet-logger", "cocoon"); - - final Priority logPriority = Priority.getPriorityForName(logLevel); + // get settings - TODO we will move this to a better place soon + final Settings settings = SettingsHelper.getSettings(this.getServletConfig()); final CocoonLogFormatter formatter = new CocoonLogFormatter(); formatter.setFormat("%7.7{priority} %{time} [%8.8{category}] " + "(%{uri}) %{thread}/%{class:short}: %{message}\\n%{throwable}"); final ServletOutputLogTarget servTarget = new ServletOutputLogTarget(this.servletContext, formatter); - final Hierarchy defaultHierarchy = Hierarchy.getDefaultHierarchy(); - final ErrorHandler errorHandler = new DefaultErrorHandler(); - defaultHierarchy.setErrorHandler(errorHandler); - defaultHierarchy.setDefaultLogTarget(servTarget); - defaultHierarchy.setDefaultPriority(logPriority); - final Logger logger = new LogKitLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("")); - final String loggerManagerClass = - this.getInitParameter("logger-class", LogKitLoggerManager.class.getName()); - - // the log4j support requires currently that the log4j system is already configured elsewhere - - final LoggerManager loggerManager = - newLoggerManager(loggerManagerClass, defaultHierarchy); - ContainerUtil.enableLogging(loggerManager, logger); - final DefaultContext subcontext = new DefaultContext(this.appContext); subcontext.put("servlet-context", this.servletContext); subcontext.put("context-work", this.workDir); if (this.servletContextPath == null) { File logSCDir = new File(this.workDir, "log"); logSCDir.mkdirs(); - if (logger.isWarnEnabled()) { - logger.warn("Setting context-root for LogKit to " + logSCDir); - } subcontext.put("context-root", logSCDir.toString()); } else { subcontext.put("context-root", this.servletContextPath); } - try { - ContainerUtil.contextualize(loggerManager, subcontext); - this.loggerManager = loggerManager; - - if (loggerManager instanceof Configurable) { - //Configure the logkit management - String logkitConfig = getInitParameter("logkit-config", "/WEB-INF/logkit.xconf"); - - // test if this is a qualified url - InputStream is = null; - if (logkitConfig.indexOf(':') == -1) { - is = this.servletContext.getResourceAsStream(logkitConfig); - if (is == null) is = new FileInputStream(logkitConfig); - } else { - URL logkitURL = new URL(logkitConfig); - is = logkitURL.openStream(); - } - final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); - final Configuration conf = builder.build(is); - ContainerUtil.configure(loggerManager, conf); - } - - // let's configure log4j - final String log4jConfig = getInitParameter("log4j-config", null); - if ( log4jConfig != null ) { - final Log4JConfigurator configurator = new Log4JConfigurator(subcontext); - - // test if this is a qualified url - InputStream is = null; - if ( log4jConfig.indexOf(':') == -1) { - is = this.servletContext.getResourceAsStream(log4jConfig); - if (is == null) is = new FileInputStream(log4jConfig); - } else { - final URL log4jURL = new URL(log4jConfig); - is = log4jURL.openStream(); - } - configurator.doConfigure(is, LogManager.getLoggerRepository()); - } - - ContainerUtil.initialize(loggerManager); - } catch (Exception e) { - errorHandler.error("Could not set up Cocoon Logger, will use screen instead", e, null); - } - - this.log = this.loggerManager.getLoggerForCategory(accesslogger); + LoggingHelper lh = new LoggingHelper(settings, servTarget, subcontext); + this.loggerManager = lh.getLoggerManager(); + this.log = lh.getLogger(); } - - private LoggerManager newLoggerManager(String loggerManagerClass, Hierarchy hierarchy) { - if (loggerManagerClass.equals(LogKitLoggerManager.class.getName())) { - return new LogKitLoggerManager(hierarchy); - } else if (loggerManagerClass.equals(Log4JLoggerManager.class.getName()) || - loggerManagerClass.equalsIgnoreCase("LOG4J")) { - return new Log4JLoggerManager(); - } else { - try { - Class clazz = Class.forName(loggerManagerClass); - return (LoggerManager)clazz.newInstance(); - } catch (Exception e) { - return new LogKitLoggerManager(hierarchy); - } - } - } - + /** * Set the ConfigFile for the Cocoon object. * Added: cocoon/trunk/src/java/org/apache/cocoon/servlet/SettingsHelper.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/servlet/SettingsHelper.java?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/java/org/apache/cocoon/servlet/SettingsHelper.java Tue Jan 18 12:57:21 2005 @@ -0,0 +1,53 @@ +/* + * Copyright 2005 The Apache Software Foundation + * + * Licensed 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 org.apache.cocoon.servlet; + +import javax.servlet.ServletConfig; + +import org.apache.cocoon.configuration.Settings; + +/** + * This helper class initializes the [EMAIL PROTECTED] Settings} object from the servlet + * configuration. + * + * @version SVN $Id: Settings.java 125448 2005-01-17 22:28:43Z cziegeler $ + */ +public class SettingsHelper { + + private SettingsHelper() { + // no instantiation + } + + public static Settings getSettings(ServletConfig config) { + final Settings s = new Settings(null); + + // logging + s.setCocoonLogger(config.getInitParameter("cocoon-logger")); + s.setServletLogger(config.getInitParameter("servlet-logger")); + s.setLogLevel(config.getInitParameter("log-level")); + s.setLoggerClassName(config.getInitParameter("logger-class")); + String value = config.getInitParameter("logkit-config"); + if ( value != null ) { + s.setLoggingConfiguration("context:/" + value); + } + value = config.getInitParameter("log4j-config"); + if ( value != null ) { + s.setLog4jConfiguration("context:/" + value); + } + + return s; + } +} Modified: cocoon/trunk/src/webapp/WEB-INF/logkit.xconf Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/webapp/WEB-INF/logkit.xconf?view=diff&rev=125544&p1=cocoon/trunk/src/webapp/WEB-INF/logkit.xconf&r1=125543&p2=cocoon/trunk/src/webapp/WEB-INF/logkit.xconf&r2=125544 ============================================================================== --- cocoon/trunk/src/webapp/WEB-INF/logkit.xconf (original) +++ cocoon/trunk/src/webapp/WEB-INF/logkit.xconf Tue Jan 18 12:57:21 2005 @@ -179,4 +179,7 @@ <log-target id-ref="error"/> </category> </categories> + + <!-- Include logging confs from different blocks --> + <include dir="context://WEB-INF/logkitconf" postfix=".logkit"/> </logkit> Added: cocoon/trunk/src/webapp/WEB-INF/logkitconf/core.logkit Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/webapp/WEB-INF/logkitconf/core.logkit?view=auto&rev=125544 ============================================================================== --- (empty file) +++ cocoon/trunk/src/webapp/WEB-INF/logkitconf/core.logkit Tue Jan 18 12:57:21 2005 @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed 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. +--> +<!-- SVN $Id:$ --> +<logkit> + <!-- Just a dummy --> +</logkit> Modified: cocoon/trunk/tools/src/blocks-build.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/tools/src/blocks-build.xsl?view=diff&rev=125544&p1=cocoon/trunk/tools/src/blocks-build.xsl&r1=125543&p2=cocoon/trunk/tools/src/blocks-build.xsl&r2=125544 ============================================================================== --- cocoon/trunk/tools/src/blocks-build.xsl (original) +++ cocoon/trunk/tools/src/blocks-build.xsl Tue Jan 18 12:57:21 2005 @@ -487,9 +487,6 @@ <xpatch file="${{build.webapp}}/WEB-INF/cocoon.xconf" srcdir="${{blocks}}" addcomments="true"> <include name="{$block-name}/conf/*.xconf"/> </xpatch> - <xpatch file="${{build.webapp}}/WEB-INF/logkit.xconf" srcdir="${{blocks}}"> - <include name="{$block-name}/conf/*.xlog"/> - </xpatch> <xpatch file="${{build.webapp}}/WEB-INF/web.xml" srcdir="${{blocks}}"> <include name="{$block-name}/conf/*.xweb"/> </xpatch>