Author: markt
Date: Tue Oct 7 12:36:17 2014
New Revision: 1629871
URL: http://svn.apache.org/r1629871
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=43682
Add support for referring to the current context, host and service name in per
Context logging.properties files
Added:
tomcat/trunk/java/org/apache/juli/WebappProperties.java (with props)
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java
tomcat/trunk/webapps/docs/changelog.xml
tomcat/trunk/webapps/docs/logging.xml
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1629871&r1=1629870&r2=1629871&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Tue
Oct 7 12:36:17 2014
@@ -65,6 +65,7 @@ import java.util.jar.Manifest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.catalina.Container;
import org.apache.catalina.Globals;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
@@ -73,6 +74,7 @@ import org.apache.catalina.LifecycleStat
import org.apache.catalina.WebResource;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
+import org.apache.juli.WebappProperties;
import org.apache.tomcat.InstrumentableClassLoader;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.IntrospectionUtils;
@@ -123,7 +125,7 @@ import org.apache.tomcat.util.res.String
* @author Craig R. McClanahan
*/
public abstract class WebappClassLoaderBase extends URLClassLoader
- implements Lifecycle, InstrumentableClassLoader {
+ implements Lifecycle, InstrumentableClassLoader, WebappProperties {
private static final org.apache.juli.logging.Log log =
org.apache.juli.logging.LogFactory.getLog(WebappClassLoaderBase.class);
@@ -2785,4 +2787,37 @@ public abstract class WebappClassLoaderB
super.addURL(url);
hasExternalRepositories = true;
}
+
+
+ @Override
+ public String getWebappName() {
+ return getContextName();
+ }
+
+
+ @Override
+ public String getHostName() {
+ if (resources != null) {
+ Container host = resources.getContext().getParent();
+ if (host != null) {
+ return host.getName();
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public String getServiceName() {
+ if (resources != null) {
+ Container host = resources.getContext().getParent();
+ if (host != null) {
+ Container engine = host.getParent();
+ if (engine != null) {
+ return engine.getName();
+ }
+ }
+ }
+ return null;
+ }
}
Modified: tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java?rev=1629871&r1=1629870&r2=1629871&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java (original)
+++ tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java Tue Oct 7
12:36:17 2014
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.juli;
import java.io.File;
@@ -618,8 +617,11 @@ public class ClassLoaderLogManager exten
break;
}
String propName = str.substring(pos_start + 2, pos_end);
- String replacement = propName.length() > 0 ? System
- .getProperty(propName) : null;
+
+ String replacement = replaceWebApplicationProperties(propName);
+ if (replacement == null) {
+ replacement = propName.length() > 0 ?
System.getProperty(propName) : null;
+ }
if (replacement != null) {
builder.append(replacement);
} else {
@@ -633,6 +635,26 @@ public class ClassLoaderLogManager exten
return result;
}
+
+ private String replaceWebApplicationProperties(String propName) {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl instanceof WebappProperties) {
+ WebappProperties wProps = (WebappProperties) cl;
+ if ("classloader.webappName".equals(propName)) {
+ return wProps.getWebappName();
+ } else if ("classloader.hostName".equals(propName)) {
+ return wProps.getHostName();
+ } else if ("classloader.serviceName".equals(propName)) {
+ return wProps.getServiceName();
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
+
// ---------------------------------------------------- LogNode Inner Class
Added: tomcat/trunk/java/org/apache/juli/WebappProperties.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/WebappProperties.java?rev=1629871&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/juli/WebappProperties.java (added)
+++ tomcat/trunk/java/org/apache/juli/WebappProperties.java Tue Oct 7 12:36:17
2014
@@ -0,0 +1,44 @@
+/*
+ * 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 org.apache.juli;
+
+/**
+ * An interface intended for use by class loaders associated with a web
+ * application that enables them to provide additional information to JULI
about
+ * the web application with which they are associated. For any web application
+ * the combination of {@link #getWebappName()}, {@link #getHostName()} and
+ * {@link #getServiceName()} must be unique.
+ */
+public interface WebappProperties {
+
+ /**
+ * Returns a name for the web application or null if none is available.
+ */
+ String getWebappName();
+
+ /**
+ * Returns a name for the Host where the web application is deployed or
null
+ * if none is available.
+ */
+ String getHostName();
+
+ /**
+ * Returns a name for the service where the Host is deployed or null if
none
+ * is available.
+ */
+ String getServiceName();
+}
Propchange: tomcat/trunk/java/org/apache/juli/WebappProperties.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1629871&r1=1629870&r2=1629871&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Oct 7 12:36:17 2014
@@ -51,6 +51,13 @@
<bug>43548</bug>: Add an XML schema for the tomcat-users.xml file.
(markt)
</add>
+ <add>
+ <bug>43682</bug>: Add support for referring to the current context,
host
+ and service name in per Context logging.properties files by using the
+ properties <code>${classloader.webappName}</code>,
+ <code>${classloader.hostName}</code> and
+ <code>${classloader.serviceName}</code>. (markt)
+ </add>
<fix>
<bug>55984</bug>: Using the allow separators in version 0 cookies
option
with the legacy cookie processor should only apply to version 0
cookies.
Modified: tomcat/trunk/webapps/docs/logging.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/logging.xml?rev=1629871&r1=1629870&r2=1629871&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/logging.xml (original)
+++ tomcat/trunk/webapps/docs/logging.xml Tue Oct 7 12:36:17 2014
@@ -274,6 +274,14 @@ java.util.logging.ConsoleHandler.level=A
prefix.</li>
<li>System property replacement is performed for property values which
contain ${systemPropertyName}.</li>
+ <li>If using a class loader that implements the
+ <code>org.apache.juli.WebappProperties</code> interface (Tomcat's
+ web application class loader does) then property replacement is also
+ performed for <code>${classloader.webappName}</code>,
+ <code>${classloader.hostName}</code> and
+ <code>${classloader.serviceName}</code> which are replaced with the
+ web application name, the host name and the service name respectively.
+ </li>
<li>By default, loggers will not delegate to their parent if they have
associated handlers. This may be changed per logger using the
<code>loggerName.useParentHandlers</code> property, which accepts a
@@ -358,7 +366,7 @@ org.apache.catalina.core.ContainerBase.[
org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-org.apache.juli.FileHandler.prefix = servlet-examples.
+org.apache.juli.FileHandler.prefix = ${classloader.webappName}.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter =
java.util.logging.SimpleFormatter]]></source>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]