mcconnell 2004/01/28 06:42:19
Modified: merlin LICENSE.txt maven.xml
merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl
DefaultFactory.java
merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit
DefaultLoggingFactory.java
merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/factory
FileTargetFactory.java Resources.properties
merlin/logging/logkit/test/conf logging.xml
Added: merlin/logging/logkit/datagram .cvsignore maven.xml
project.properties project.xml
merlin/logging/logkit/datagram/src/java/org/apache/avalon/logging/logkit/factory
DatagramTargetFactory.java Resources.properties
Log:
Addition of an initial log target plugin example.
Revision Changes Path
1.4 +175 -16 avalon/merlin/LICENSE.txt
Index: LICENSE.txt
===================================================================
RCS file: /home/cvs/avalon/merlin/LICENSE.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LICENSE.txt 24 Jan 2004 23:25:20 -0000 1.3
+++ LICENSE.txt 28 Jan 2004 14:41:49 -0000 1.4
@@ -1,16 +1,175 @@
-/*
- * Copyright 2004 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.
- */
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
1.44 +4 -0 avalon/merlin/maven.xml
Index: maven.xml
===================================================================
RCS file: /home/cvs/avalon/merlin/maven.xml,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- maven.xml 25 Jan 2004 13:18:48 -0000 1.43
+++ maven.xml 28 Jan 2004 14:41:49 -0000 1.44
@@ -90,6 +90,8 @@
prereqs="avalon:build-logging,avalon:build-main,avalon:build-kernel,avalon:build-plugin"/>
<goal name="avalon:build-logging" description="Build Logging.">
+
+ <!-- build the logging service -->
<maven:reactor basedir="${basedir}"
includes="logging/**/project.xml"
excludes="logging/logkit/test/project.xml"
@@ -117,6 +119,8 @@
</ant:copy>
</j:forEach>
</j:forEach>
+
+ <!-- execute the logging service test -->
<maven:reactor basedir="${basedir}"
includes="logging/logkit/test/project.xml"
banner="Testing:"
1.21 +6 -0
avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java
Index: DefaultFactory.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- DefaultFactory.java 25 Jan 2004 13:18:49 -0000 1.20
+++ DefaultFactory.java 28 Jan 2004 14:41:59 -0000 1.21
@@ -59,6 +59,7 @@
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
@@ -667,6 +668,11 @@
Builder builder = m_context.newBuilder( m_classloader, artifact );
Factory factory = builder.getFactory();
LoggingCriteria params = getLoggingCriteria( factory );
+ if( conf.getAttribute( "debug", "false" ).equals( "true" ) )
+ {
+ params.setBootstrapLogger(
+ new ConsoleLogger( ConsoleLogger.LEVEL_DEBUG ) );
+ }
params.setBaseDirectory( dir );
params.setConfiguration( conf );
return (LoggingManager) factory.create( params );
1.1 avalon/merlin/logging/logkit/datagram/.cvsignore
Index: .cvsignore
===================================================================
maven.log
velocity.log
build.properties
target
.classpath
.project
1.1 avalon/merlin/logging/logkit/datagram/maven.xml
Index: maven.xml
===================================================================
<project default="jar:install" xmlns:maven="jelly:maven" xmlns:j="jelly:core"
xmlns:util="jelly:util" xmlns:ant="jelly:ant">
<postGoal name="java:prepare-filesystem">
<attainGoal name="avalon:artifact"/>
</postGoal>
<postGoal name="jar:install">
<ant:copy verbose="yes"
toDir="${maven.repo.local}/${pom.groupId}/jars"
file="${maven.build.dir}/${pom.artifactId}-${pom.currentVersion}.jar.meta" />
</postGoal>
</project>
1.1 avalon/merlin/logging/logkit/datagram/project.properties
Index: project.properties
===================================================================
#
# factory class
#
avalon.artifact.factory =
org.apache.avalon.logging.logkit.factory.DatagramTargetFactory
1.1 avalon/merlin/logging/logkit/datagram/project.xml
Index: project.xml
===================================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<project>
<extend>${basedir}/../../../project.xml</extend>
<groupId>avalon-logging</groupId>
<id>avalon-logkit-datagram</id>
<name>Avalon Logging Logkit Datagram Target</name>
<package>org.apache.avalon.logging.logkit</package>
<currentVersion>1.0-SNAPSHOT</currentVersion>
<inceptionYear>2002</inceptionYear>
<shortDescription>Avalon Logging Logkit Datagram Target</shortDescription>
<dependencies>
<!-- avalon dependecies -->
<dependency>
<groupId>avalon-repository</groupId>
<artifactId>avalon-repository-main</artifactId>
<version>1.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>avalon-logging</groupId>
<artifactId>avalon-logging-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>avalon-logging</groupId>
<artifactId>avalon-logkit-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-api</artifactId>
<version>4.1.5</version>
</dependency>
<dependency>
<id>excalibur-i18n</id>
<version>1.1</version>
</dependency>
<dependency>
<groupId>logkit</groupId>
<artifactId>logkit</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
</project>
1.1
avalon/merlin/logging/logkit/datagram/src/java/org/apache/avalon/logging/logkit/factory/DatagramTargetFactory.java
Index: DatagramTargetFactory.java
===================================================================
/*
* Copyright 2004 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.avalon.logging.logkit.factory;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.HashMap;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.logging.logkit.LogTargetException;
import org.apache.avalon.logging.logkit.LogTargetFactory;
import org.apache.avalon.logging.logkit.FormatterFactory;
import org.apache.avalon.repository.provider.Factory;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.log.LogTarget;
import org.apache.log.format.ExtendedPatternFormatter;
import org.apache.log.format.Formatter;
import org.apache.log.format.PatternFormatter;
import org.apache.log.format.RawFormatter;
import org.apache.log.output.net.DatagramOutputTarget;
/**
* This factory creates LogTargets with a wrapped DatagramOutputTarget around it.
* <p>
* Configuration syntax:
* <pre>
* <datagram-target id="target-id">
* <address hostname="hostname" port="4455" />
* <format type="extended">
* %7.7{priority} %23.23{time:yyyy-MM-dd HH:mm:ss:SSS} [%25.25{category}] :
%{message}\n%{throwable}
* </format>
* </datagram-target>
* </pre>
* </p>
* <p>
* This factory creates a DatagramOutputTarget object which will
* sends datagrams to the specified address. The name of the target is specified by
the hostname attribute
* of the <address> element and the port by the port attribute.The
<address> element
* wraps the format to output the log.
* </p>
*
*
* @author <a href="mailto:[EMAIL PROTECTED]"> Rajendra Ghorpade </a>
*/
public class DatagramTargetFactory implements LogTargetFactory, Factory
{
//--------------------------------------------------------------
// static
//--------------------------------------------------------------
private static final Resources REZ =
ResourceManager.getPackageResources( DatagramTargetFactory.class );
private static final String FORMAT =
"%7.7{priority} %5.5{time} [%8.8{category}] (%{context}):
%{message}\\n%{throwable}";
//--------------------------------------------------------------
// Factory
//--------------------------------------------------------------
public Map createDefaultCriteria()
{
return new HashMap();
}
public Object create()
{
return create( createDefaultCriteria() );
}
public Object create( Map criteria )
{
return this;
}
//--------------------------------------------------------------
// LogTargetFactory
//--------------------------------------------------------------
/**
* Create a LogTarget based on a supplied configuration
* @param conf the target coonfiguration
* @return the datagram target
* @exception LogTargetException if a target creation error occurs
*/
public LogTarget createTarget( final Configuration conf )
throws LogTargetException
{
InetAddress address;
final Configuration configChild = conf.getChild( "address", false );
if( null == configChild )
{
final String error =
REZ.getString( "datagram.error.missing-address" );
throw new LogTargetException( error );
}
try
{
address =
InetAddress.getByName(
configChild.getAttribute( "hostname" ) );
}
catch( UnknownHostException uhex )
{
final String error =
REZ.getString( "datagram.error.unknown-host" );
throw new LogTargetException( error, uhex );
}
catch( ConfigurationException e )
{
final String error =
REZ.getString( "datagram.error.missing-host" );
throw new LogTargetException( error, e );
}
Configuration formatConfig = conf.getChild( "format" );
final Formatter formatter = getFormatter( formatConfig );
try
{
int port = configChild.getAttributeAsInteger( "port" );
return new DatagramOutputTarget( address, port, formatter );
}
catch( IOException ioex )
{
final String error =
REZ.getString( "datagram.error.internal" );
throw new LogTargetException( error, ioex );
}
catch( ConfigurationException e )
{
final String error =
REZ.getString( "datagram.error.missing-port" );
throw new LogTargetException( error, e );
}
}
/**
* Returns the Formatter
*
* @param conf Configuration for the formatter
*/
protected Formatter getFormatter( final Configuration conf )
{
final String type = conf.getAttribute( "type", "pattern" );
final String format = conf.getValue( FORMAT );
if( "extended".equals( type ) )
{
return new ExtendedPatternFormatter( format );
}
else if( "raw".equals( type ) )
{
return new RawFormatter();
}
/** default formatter */
return new PatternFormatter( format );
}
}
1.1
avalon/merlin/logging/logkit/datagram/src/java/org/apache/avalon/logging/logkit/factory/Resources.properties
Index: Resources.properties
===================================================================
datagram.error.missing-address=Missing 'address' attribute is supplied datagram
target configuration.
datagram.error.unknown-host=Datagram target references an unknown host.
datagram.error.missing-host=Datagram target does not contain required 'hostname'
attribute.
datagram.error.internal=Internal error while attempting to construct datagram target.
datagram.error.missing-port=Datagram target does not contain required 'port'
attribute.
1.6 +13 -0
avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/DefaultLoggingFactory.java
Index: DefaultLoggingFactory.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/DefaultLoggingFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultLoggingFactory.java 28 Jan 2004 10:01:54 -0000 1.5
+++ DefaultLoggingFactory.java 28 Jan 2004 14:42:16 -0000 1.6
@@ -41,6 +41,7 @@
import org.apache.avalon.logging.logkit.factory.FileTargetFactory;
import org.apache.avalon.logging.logkit.factory.StreamTargetFactory;
import org.apache.avalon.logging.logkit.factory.MulticastTargetFactory;
+import org.apache.avalon.logging.logkit.factory.PluginTargetFactory;
import org.apache.avalon.repository.provider.InitialContext;
import org.apache.avalon.repository.provider.Factory;
@@ -306,6 +307,10 @@
{
return MulticastTargetFactory.class;
}
+ else if( key.equals( "target" ) )
+ {
+ return PluginTargetFactory.class;
+ }
else
{
final String message =
@@ -391,6 +396,14 @@
else if( FormatterFactory.class.isAssignableFrom( c ) )
{
args[i] = FORMATTER;
+ }
+ else if( ClassLoader.class.isAssignableFrom( c ) )
+ {
+ args[i] = m_classloader;
+ }
+ else if( InitialContext.class.isAssignableFrom( c ) )
+ {
+ args[i] = m_context;
}
else
{
1.4 +2 -2
avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/factory/FileTargetFactory.java
Index: FileTargetFactory.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/factory/FileTargetFactory.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FileTargetFactory.java 27 Jan 2004 19:27:23 -0000 1.3
+++ FileTargetFactory.java 28 Jan 2004 14:42:17 -0000 1.4
@@ -148,7 +148,7 @@
//--------------------------------------------------------------
private static final Resources REZ =
- ResourceManager.getPackageResources( DatagramTargetFactory.class );
+ ResourceManager.getPackageResources( FileTargetFactory.class );
private static final long SECOND = 1000;
private static final long MINUTE = 60 * SECOND;
1.3 +3 -0
avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/factory/Resources.properties
Index: Resources.properties
===================================================================
RCS file:
/home/cvs/avalon/merlin/logging/logkit/impl/src/java/org/apache/avalon/logging/logkit/factory/Resources.properties,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Resources.properties 27 Jan 2004 19:27:23 -0000 1.2
+++ Resources.properties 28 Jan 2004 14:42:17 -0000 1.3
@@ -18,3 +18,6 @@
multicast.error.unknown-id=Multicast targetref references an unknown log target id
[{0}].
multicast.error.missing-id=Multicast targetref 'id' attribute is missing.
+
+plugin.error.missing-artifact=Missing 'artifact' attribute in target directive.
+plugin.error.build=Unexpected error while loading target plugin [{0}].
1.5 +4 -0 avalon/merlin/logging/logkit/test/conf/logging.xml
Index: logging.xml
===================================================================
RCS file: /home/cvs/avalon/merlin/logging/logkit/test/conf/logging.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- logging.xml 28 Jan 2004 10:02:04 -0000 1.4
+++ logging.xml 28 Jan 2004 14:42:17 -0000 1.5
@@ -22,6 +22,10 @@
<targetref id="standard"/>
<targetref id="simple"/>
</multicast>
+ <target id="datagram"
+ artifact="avalon-logging/avalon-logkit-datagram?version=1.0-SNAPSHOT">
+ <address hostname="localhost" port="0"/>
+ </target>
</targets>
<!--
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]