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/17 23:28:44 UTC

svn commit: r125448 - /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

Author: cziegeler
Date: Mon Jan 17 14:28:43 2005
New Revision: 125448

URL: http://svn.apache.org/viewcvs?view=rev&rev=125448
Log:
Start adding logging helper
Added:
   cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java   (contents, props changed)
Modified:
   cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java   (contents, props changed)
   cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java   (contents, props changed)

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=125448&p1=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java&r1=125447&p2=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java&r2=125448
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java	(original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java	Mon Jan 17 14:28:43 2005
@@ -69,7 +69,7 @@
  * in that case the whitespace is left intact.
  * </p>
  *
- * @version CVS $Revision: 1.33 $ $Date: 2004/04/03 23:55:54 $
+ * @version SVN $Id$
  */
 public class ConfigurationBuilder
     extends DefaultHandler

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=125448&p1=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java&r1=125447&p2=cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java&r2=125448
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java	(original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java	Mon Jan 17 14:28:43 2005
@@ -19,7 +19,7 @@
 
 /**
  *
- * @version CVS $Revision: 1.33 $ $Date: 2004/04/03 23:55:54 $
+ * @version SVN $Id$
  */
 public class Settings {
 
@@ -45,8 +45,295 @@
     protected boolean showTime;
     protected boolean manageExceptions;
     protected String formEncoding;
-
+    protected String log4jConfiguration;
+    
     public Settings(Properties properties) {
         // ignore
+    }
+    
+    
+    /**
+     * @return Returns the allowReload.
+     */
+    public boolean isAllowReload() {
+        return this.allowReload;
+    }
+    /**
+     * @param allowReload The allowReload to set.
+     */
+    public void setAllowReload(boolean allowReload) {
+        this.allowReload = allowReload;
+    }
+    /**
+     * @return Returns the autosaveUploads.
+     */
+    public boolean isAutosaveUploads() {
+        return this.autosaveUploads;
+    }
+    /**
+     * @param autosaveUploads The autosaveUploads to set.
+     */
+    public void setAutosaveUploads(boolean autosaveUploads) {
+        this.autosaveUploads = autosaveUploads;
+    }
+    /**
+     * @return Returns the cacheDirectory.
+     */
+    public String getCacheDirectory() {
+        return this.cacheDirectory;
+    }
+    /**
+     * @param cacheDirectory The cacheDirectory to set.
+     */
+    public void setCacheDirectory(String cacheDirectory) {
+        this.cacheDirectory = cacheDirectory;
+    }
+    /**
+     * @return Returns the classloaderClassName.
+     */
+    public String getClassloaderClassName() {
+        return this.classloaderClassName;
+    }
+    /**
+     * @param classloaderClassName The classloaderClassName to set.
+     */
+    public void setClassloaderClassName(String classloaderClassName) {
+        this.classloaderClassName = classloaderClassName;
+    }
+    /**
+     * @return Returns the cocoonLogger.
+     */
+    public String getCocoonLogger() {
+        return this.cocoonLogger;
+    }
+    /**
+     * @param cocoonLogger The cocoonLogger to set.
+     */
+    public void setCocoonLogger(String cocoonLogger) {
+        this.cocoonLogger = cocoonLogger;
+    }
+    /**
+     * @return Returns the configuration.
+     */
+    public String getConfiguration() {
+        return this.configuration;
+    }
+    /**
+     * @param configuration The configuration to set.
+     */
+    public void setConfiguration(String configuration) {
+        this.configuration = configuration;
+    }
+    /**
+     * @return Returns the enableUploads.
+     */
+    public boolean isEnableUploads() {
+        return this.enableUploads;
+    }
+    /**
+     * @param enableUploads The enableUploads to set.
+     */
+    public void setEnableUploads(boolean enableUploads) {
+        this.enableUploads = enableUploads;
+    }
+    /**
+     * @return Returns the extraClasspaths.
+     */
+    public String[] getExtraClasspaths() {
+        return this.extraClasspaths;
+    }
+    /**
+     * @param extraClasspaths The extraClasspaths to set.
+     */
+    public void setExtraClasspaths(String[] extraClasspaths) {
+        this.extraClasspaths = extraClasspaths;
+    }
+    /**
+     * @return Returns the forceProperties.
+     */
+    public String[] getForceProperties() {
+        return this.forceProperties;
+    }
+    /**
+     * @param forceProperties The forceProperties to set.
+     */
+    public void setForceProperties(String[] forceProperties) {
+        this.forceProperties = forceProperties;
+    }
+    /**
+     * @return Returns the formEncoding.
+     */
+    public String getFormEncoding() {
+        return this.formEncoding;
+    }
+    /**
+     * @param formEncoding The formEncoding to set.
+     */
+    public void setFormEncoding(String formEncoding) {
+        this.formEncoding = formEncoding;
+    }
+    /**
+     * @return Returns the initClassloader.
+     */
+    public boolean isInitClassloader() {
+        return this.initClassloader;
+    }
+    /**
+     * @param initClassloader The initClassloader to set.
+     */
+    public void setInitClassloader(boolean initClassloader) {
+        this.initClassloader = initClassloader;
+    }
+    /**
+     * @return Returns the loadClasses.
+     */
+    public String[] getLoadClasses() {
+        return this.loadClasses;
+    }
+    /**
+     * @param loadClasses The loadClasses to set.
+     */
+    public void setLoadClasses(String[] loadClasses) {
+        this.loadClasses = loadClasses;
+    }
+    /**
+     * @return Returns the loggerClassName.
+     */
+    public String getLoggerClassName() {
+        return this.loggerClassName;
+    }
+    /**
+     * @param loggerClassName The loggerClassName to set.
+     */
+    public void setLoggerClassName(String loggerClassName) {
+        this.loggerClassName = loggerClassName;
+    }
+    /**
+     * @return Returns the loggingConfiguration.
+     */
+    public String getLoggingConfiguration() {
+        return this.loggingConfiguration;
+    }
+    /**
+     * @param loggingConfiguration The loggingConfiguration to set.
+     */
+    public void setLoggingConfiguration(String loggingConfiguration) {
+        this.loggingConfiguration = loggingConfiguration;
+    }
+    /**
+     * @return Returns the logLevel.
+     */
+    public String getLogLevel() {
+        return this.logLevel;
+    }
+    /**
+     * @param logLevel The logLevel to set.
+     */
+    public void setLogLevel(String logLevel) {
+        this.logLevel = logLevel;
+    }
+    /**
+     * @return Returns the manageExceptions.
+     */
+    public boolean isManageExceptions() {
+        return this.manageExceptions;
+    }
+    /**
+     * @param manageExceptions The manageExceptions to set.
+     */
+    public void setManageExceptions(boolean manageExceptions) {
+        this.manageExceptions = manageExceptions;
+    }
+    /**
+     * @return Returns the maxUploadSize.
+     */
+    public long getMaxUploadSize() {
+        return this.maxUploadSize;
+    }
+    /**
+     * @param maxUploadSize The maxUploadSize to set.
+     */
+    public void setMaxUploadSize(long maxUploadSize) {
+        this.maxUploadSize = maxUploadSize;
+    }
+    /**
+     * @return Returns the overwriteUploads.
+     */
+    public boolean isOverwriteUploads() {
+        return this.overwriteUploads;
+    }
+    /**
+     * @param overwriteUploads The overwriteUploads to set.
+     */
+    public void setOverwriteUploads(boolean overwriteUploads) {
+        this.overwriteUploads = overwriteUploads;
+    }
+    /**
+     * @return Returns the parentServiceManagerClassName.
+     */
+    public String getParentServiceManagerClassName() {
+        return this.parentServiceManagerClassName;
+    }
+    /**
+     * @param parentServiceManagerClassName The parentServiceManagerClassName to set.
+     */
+    public void setParentServiceManagerClassName(
+            String parentServiceManagerClassName) {
+        this.parentServiceManagerClassName = parentServiceManagerClassName;
+    }
+    /**
+     * @return Returns the showTime.
+     */
+    public boolean isShowTime() {
+        return this.showTime;
+    }
+    /**
+     * @param showTime The showTime to set.
+     */
+    public void setShowTime(boolean showTime) {
+        this.showTime = showTime;
+    }
+    /**
+     * @return Returns the uploadDirectory.
+     */
+    public String getUploadDirectory() {
+        return this.uploadDirectory;
+    }
+    /**
+     * @param uploadDirectory The uploadDirectory to set.
+     */
+    public void setUploadDirectory(String uploadDirectory) {
+        this.uploadDirectory = uploadDirectory;
+    }
+    /**
+     * @return Returns the workDirectory.
+     */
+    public String getWorkDirectory() {
+        return this.workDirectory;
+    }
+    /**
+     * @param workDirectory The workDirectory to set.
+     */
+    public void setWorkDirectory(String workDirectory) {
+        this.workDirectory = workDirectory;
+    }
+    
+    /**
+     * @return Returns the log4jConfiguration.
+     */
+    public String getLog4jConfiguration() {
+        return this.log4jConfiguration;
+    }
+    /**
+     * @param log4jConfiguration The log4jConfiguration to set.
+     */
+    public void setLog4jConfiguration(String log4jConfiguration) {
+        this.log4jConfiguration = log4jConfiguration;
+    }
+    public String get(String property, String defaultValue) {
+        if ( property == null ) {
+            return defaultValue;
+        }
+        return property;
     }
 }

Added: 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=auto&rev=125448
==============================================================================
--- (empty file)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java	Mon Jan 17 14:28:43 2005
@@ -0,0 +1,159 @@
+/*
+ * 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.components.container;
+
+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.container.ContainerUtil;
+import org.apache.avalon.framework.context.Context;
+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.util.log.Log4JConfigurator;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
+import org.apache.log.ErrorHandler;
+import org.apache.log.Hierarchy;
+import org.apache.log.LogTarget;
+import org.apache.log.Priority;
+import org.apache.log.util.DefaultErrorHandler;
+import org.apache.log4j.LogManager;
+
+/**
+*
+* @version SVN $Id$
+*/
+public class LoggingHelper {
+    
+    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
+     * "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(LogTarget defaultTarget, Context context) {
+        final String logLevel = this.settings.get(this.settings.getLogLevel(), "INFO");
+        
+        final String accesslogger = this.settings.get(this.settings.getCocoonLogger(), "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(""));
+        final String loggerManagerClass =
+            this.settings.get(this.settings.getLoggerClassName(), 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);
+
+        try {
+            ContainerUtil.contextualize(loggerManager, context);
+            this.loggerManager = loggerManager;
+
+            if (loggerManager instanceof Configurable) {
+                //Configure the logkit management
+                String logkitConfig = this.settings.get(this.settings.getLoggingConfiguration(), "/WEB-INF/logkit.xconf");
+
+                Source source = null;
+                try {
+                    source = this.resolver.resolveURI(logkitConfig);
+                    final ConfigurationBuilder builder = new ConfigurationBuilder();
+                    final Configuration conf = builder.build(source.getInputStream());
+                    ContainerUtil.configure(loggerManager, conf);
+                } finally {
+                    this.resolver.release(source);
+                }
+            }
+
+            // let's configure log4j
+            final String log4jConfig = this.settings.getLog4jConfiguration();
+            if ( log4jConfig != null ) {
+                final Log4JConfigurator configurator = new Log4JConfigurator(context);
+
+                Source source = null;
+                try {
+                    source = this.resolver.resolveURI(log4jConfig);
+                    configurator.doConfigure(source.getInputStream(), LogManager.getLoggerRepository());
+                } finally {
+                    this.resolver.release(source);
+                }
+            }
+
+            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);
+    }
+
+    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);
+            }
+        }
+    }
+
+    /**
+     * @return Returns the log.
+     */
+    public Logger getLog() {
+        return this.log;
+    }
+    /**
+     * @return Returns the loggerManager.
+     */
+    public LoggerManager getLoggerManager() {
+        return this.loggerManager;
+    }
+}