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 2004/06/11 22:29:29 UTC
cvs commit: cocoon-2.1/lib/core log4j-1.2.8.jar
cziegeler 2004/06/11 13:29:29
Modified: . status.xml
src/webapp/WEB-INF web.xml
src/java/org/apache/cocoon/servlet CocoonServlet.java
lib jars.xml
Added: src/webapp/WEB-INF log4j.xconf
src/java/org/apache/cocoon/util/log Log4JConfigurator.java
lib/core log4j-1.2.8.jar
Removed: lib/optional log4j-1.2.8.jar
Log:
Add configuration support for log4j.
Revision Changes Path
1.364 +4 -1 cocoon-2.1/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/cocoon-2.1/status.xml,v
retrieving revision 1.363
retrieving revision 1.364
diff -u -r1.363 -r1.364
--- status.xml 11 Jun 2004 12:05:48 -0000 1.363
+++ status.xml 11 Jun 2004 20:29:29 -0000 1.364
@@ -205,6 +205,9 @@
<release version="@version@" date="@date@">
<action dev="CZ" type="add">
+ Add configuration support for log4j.
+ </action>
+ <action dev="CZ" type="add">
Add profiling/debugging API for the sitemap.
</action>
<action dev="CZ" type="add">
1.16 +13 -0 cocoon-2.1/src/webapp/WEB-INF/web.xml
Index: web.xml
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/webapp/WEB-INF/web.xml,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- web.xml 3 Jun 2004 12:31:30 -0000 1.15
+++ web.xml 11 Jun 2004 20:29:29 -0000 1.16
@@ -140,6 +140,19 @@
-->
<!--
+ If you want to configure log4j using Cocoon, then you can define
+ an XML configuration file here. You can use the usual log4j property
+ substituation mechanism, e.g. ${context-root} is replaced by the
+ context root of this web application etc.
+ You can configure the log4j configuration even if you use LogKit
+ for Cocoon logging. You can use this to configure third party code
+ for example.
+ <init-param>
+ <param-name>log4j-config</param-name>
+ <param-value>/WEB-INF/log4j.xconf</param-value>
+ </init-param>
+ -->
+ <!--
Allow reinstantiating (reloading) of the cocoon instance. If this is
set to "yes" or "true", a new cocoon instance can be created using
the request parameter "cocoon-reload". Default is no for security reasons.
1.1 cocoon-2.1/src/webapp/WEB-INF/log4j.xconf
Index: log4j.xconf
===================================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!--
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.
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- This is a sample configuration for log4j.
It simply just logs everything into a single
log file.
Note, that you can use properties for value substituation.
-->
<appender name="COCOON_DEFAULT" class="org.apache.log4j.FileAppender">
<param name="File" value="${context-root}/WEB-INF/logs/log4j.log" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="COCOON_DEFAULT" />
</root>
</log4j:configuration>
1.30 +20 -1 cocoon-2.1/src/java/org/apache/cocoon/servlet/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/servlet/CocoonServlet.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- CocoonServlet.java 25 May 2004 07:28:26 -0000 1.29
+++ CocoonServlet.java 11 Jun 2004 20:29:29 -0000 1.30
@@ -76,6 +76,7 @@
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.excalibur.instrument.InstrumentManager;
@@ -87,6 +88,7 @@
import org.apache.log.ErrorHandler;
import org.apache.log.util.DefaultErrorHandler;
import org.apache.log.output.ServletOutputLogTarget;
+import org.apache.log4j.LogManager;
/**
* This is the entry point for Cocoon execution as an HTTP Servlet.
@@ -825,6 +827,23 @@
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) {
1.1 cocoon-2.1/src/java/org/apache/cocoon/util/log/Log4JConfigurator.java
Index: Log4JConfigurator.java
===================================================================
/*
* Created on 11.06.2004
*
* To change this generated comment go to
* Window>Preferences>Java>Code Generation>Code Template
*/
/*
* 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.
*/
package org.apache.cocoon.util.log;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.xml.DOMConfigurator;
/**
* This is a configurator for log4j that supports variable substitution
*
* @version CVS $Id: Log4JConfigurator.java,v 1.1 2004/06/11 20:29:29 cziegeler Exp $
*/
public class Log4JConfigurator extends DOMConfigurator {
protected Context context;
public Log4JConfigurator(Context context) {
this.context = context;
}
protected String subst(String value) {
try {
return this.substVars(value);
} catch (IllegalArgumentException e) {
LogLog.warn("Could not perform variable substitution.", e);
return value;
}
}
static String DELIM_START = "${";
static char DELIM_STOP = '}';
static int DELIM_START_LEN = 2;
static int DELIM_STOP_LEN = 1;
/**
* This is directly copied from log4j's OptionConverter class.
* The only difference is the getting of a property.
*/
public String substVars(String val)
throws IllegalArgumentException {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int j, k;
while(true) {
j=val.indexOf(DELIM_START, i);
if (j == -1) {
// no more variables
if(i==0) { // this is a simple string
return val;
} else { // add the tail string which contails no variables and return the result.
sbuf.append(val.substring(i, val.length()));
return sbuf.toString();
}
} else {
sbuf.append(val.substring(i, j));
k = val.indexOf(DELIM_STOP, j);
if(k == -1) {
throw new IllegalArgumentException('"'+val+
"\" has no closing brace. Opening brace at position " + j
+ '.');
} else {
j += DELIM_START_LEN;
String key = val.substring(j, k);
// first try in System properties
String replacement = this.getSystemProperty(key);
// then try props parameter
if (replacement == null && this.context != null) {
try {
Object o = this.context.get(key);
if ( o != null ) {
replacement = o.toString();
}
} catch (ContextException ce) {
LogLog.debug("Was not allowed to read context property \""+key+"\".");
}
}
if (replacement != null) {
// Do variable substitution on the replacement string
// such that we can solve "Hello ${x2}" as "Hello p1"
// the where the properties are
// x1=p1
// x2=${x1}
String recursiveReplacement = substVars(replacement);
sbuf.append(recursiveReplacement);
}
i = k + DELIM_STOP_LEN;
}
}
}
}
/**
* This is directly copied from log4j's OptionConverter class.
* The only difference is the getting of a property.
*/
public String getSystemProperty(String key) {
try {
return System.getProperty(key, null);
} catch(Throwable e) { // MS-Java throws com.ms.security.SecurityExceptionEx
LogLog.debug("Was not allowed to read system property \""+key+"\".");
return null;
}
}
}
1.226 +3 -3 cocoon-2.1/lib/jars.xml
Index: jars.xml
===================================================================
RCS file: /home/cvs/cocoon-2.1/lib/jars.xml,v
retrieving revision 1.225
retrieving revision 1.226
diff -u -r1.225 -r1.226
--- jars.xml 7 Jun 2004 13:10:41 -0000 1.225
+++ jars.xml 11 Jun 2004 20:29:29 -0000 1.226
@@ -592,8 +592,8 @@
<file>
<title>Log4j</title>
<description>Logging for java</description>
- <used-by>DELI (deli block)</used-by>
- <lib>optional/log4j-1.2.8.jar</lib>
+ <used-by>Core and DELI (deli block)</used-by>
+ <lib>core/log4j-1.2.8.jar</lib>
<homepage>http://logging.apache.org/log4j/</homepage>
</file>
1.1 cocoon-2.1/lib/core/log4j-1.2.8.jar
<<Binary file>>