You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2007/08/11 06:11:29 UTC
svn commit: r564831 - in /logging/log4j/companions/receivers/trunk: ./
src/main/java/org/apache/log4j/rewrite/
src/test/java/org/apache/log4j/rewrite/ src/test/java/org/apache/log4j/util/
src/test/resources/org/apache/log4j/rewrite/
Author: carnold
Date: Fri Aug 10 21:11:27 2007
New Revision: 564831
URL: http://svn.apache.org/viewvc?view=rev&rev=564831
Log:
Bug 41483: Add RewriteAppender and policies to replace MapFilter, etc
Added:
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java
logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java
logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/
logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/util/
logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/util/Compare.java
- copied unchanged from r563225, logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/util/Compare.java
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.log
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.xml
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.log
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.xml
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.log
logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.xml
Modified:
logging/log4j/companions/receivers/trunk/pom.xml
Modified: logging/log4j/companions/receivers/trunk/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/pom.xml?view=diff&rev=564831&r1=564830&r2=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/pom.xml (original)
+++ logging/log4j/companions/receivers/trunk/pom.xml Fri Aug 10 21:11:27 2007
@@ -216,7 +216,7 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.15</version>
+ <version>1.2.15-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
Added: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java (added)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,85 @@
+/*
+ * 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.log4j.rewrite;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.log4j.rewrite.RewritePolicy;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * This policy rewrites events where the message of the
+ * original event implementes java.util.Map.
+ * All other events are passed through unmodified.
+ * If the map contains a "message" entry, the value will be
+ * used as the message for the rewritten event. The rewritten
+ * event will have a property set that is the combination of the
+ * original property set and the other members of the message map.
+ * If both the original property set and the message map
+ * contain the same entry, the value from the message map
+ * will overwrite the original property set.
+ *
+ * The combination of the RewriteAppender and this policy
+ * performs the same actions as the MapFilter from log4j 1.3.
+ */
+public class MapRewritePolicy implements RewritePolicy {
+ /**
+ * {@inheritDoc}
+ */
+ public LoggingEvent rewrite(final LoggingEvent source) {
+ Object msg = source.getMessage();
+ if (msg instanceof Map) {
+ Map props = new HashMap(source.getProperties());
+ Map eventProps = (Map) msg;
+ //
+ // if the map sent in the logging request
+ // has "message" entry, use that as the message body
+ // otherwise, use the entire map.
+ //
+ Object newMsg = eventProps.get("message");
+ if (newMsg == null) {
+ newMsg = msg;
+ }
+
+ for(Iterator iter = eventProps.entrySet().iterator();
+ iter.hasNext();
+ ) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ if (!("message".equals(entry.getKey()))) {
+ props.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ return new LoggingEvent(
+ source.getFQNOfLoggerClass(),
+ source.getLogger(),
+ source.getTimeStamp(),
+ source.getLevel(),
+ newMsg,
+ source.getThreadName(),
+ source.getThrowableInformation(),
+ source.getNDC(),
+ source.getLocationInformation(),
+ props);
+ } else {
+ return source;
+ }
+
+ }
+}
Added: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java (added)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,86 @@
+/*
+ * 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.log4j.rewrite;
+
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.rewrite.RewritePolicy;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * This policy rewrites events by adding
+ * a user-specified list of properties to the event.
+ * Existing properties are not modified.
+ *
+ * The combination of the RewriteAppender and this policy
+ * performs the same actions as the PropertyFilter from log4j 1.3.
+ */
+
+public class PropertyRewritePolicy implements RewritePolicy {
+ private Map properties = Collections.EMPTY_MAP;
+ public PropertyRewritePolicy() {
+ }
+
+ public void setProperties(String props) {
+ Map hashTable = new HashMap();
+ StringTokenizer pairs = new StringTokenizer(props, ",");
+ while (pairs.hasMoreTokens()) {
+ StringTokenizer entry = new StringTokenizer(pairs.nextToken(), "=");
+ hashTable.put(entry.nextElement().toString().trim(), entry.nextElement().toString().trim());
+ }
+ synchronized(this) {
+ properties = hashTable;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LoggingEvent rewrite(final LoggingEvent source) {
+ if (!properties.isEmpty()) {
+ Map rewriteProps = new HashMap(source.getProperties());
+ for(Iterator iter = properties.entrySet().iterator();
+ iter.hasNext();
+ ) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ if (!rewriteProps.containsKey(entry.getKey())) {
+ rewriteProps.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ return new LoggingEvent(
+ source.getFQNOfLoggerClass(),
+ source.getLogger(),
+ source.getTimeStamp(),
+ source.getLevel(),
+ source.getMessage(),
+ source.getThreadName(),
+ source.getThrowableInformation(),
+ source.getNDC(),
+ source.getLocationInformation(),
+ rewriteProps);
+ }
+ return source;
+ }
+
+
+
+}
Added: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java (added)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,89 @@
+/*
+ * 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.log4j.rewrite;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.beans.PropertyDescriptor;
+import java.beans.Introspector;
+
+import org.apache.log4j.rewrite.RewritePolicy;
+import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * This policy rewrites events by evaluating any
+ * JavaBean properties on the message object and adding them
+ * to the event properties. If the message object has a
+ * message property, the value of that property will be
+ * used as the message for the rewritten event and will
+ * not be added to the event properties. Values from the
+ * JavaBean properties will replace any existing property
+ * with the same name.
+ *
+ * The combination of the RewriteAppender and this policy
+ * performs the same actions as the ReflectionFilter from log4j 1.3.
+ */
+public class ReflectionRewritePolicy implements RewritePolicy {
+ /**
+ * {@inheritDoc}
+ */
+ public LoggingEvent rewrite(final LoggingEvent source) {
+ Object msg = source.getMessage();
+ if (!(msg instanceof String)) {
+ Object newMsg = msg;
+ Map rewriteProps = new HashMap(source.getProperties());
+
+ try {
+ PropertyDescriptor[] props = Introspector.getBeanInfo(
+ msg.getClass(), Object.class).getPropertyDescriptors();
+ if (props.length > 0) {
+ for (int i=0;i<props.length;i++) {
+ try {
+ Object propertyValue =
+ props[i].getReadMethod().invoke(msg,
+ (Object[]) null);
+ if ("message".equalsIgnoreCase(props[i].getName())) {
+ newMsg = propertyValue;
+ } else {
+ rewriteProps.put(props[i].getName(), propertyValue);
+ }
+ } catch (Exception e) {
+ LogLog.warn("Unable to evaluate property " +
+ props[i].getName(), e);
+ }
+ }
+ return new LoggingEvent(
+ source.getFQNOfLoggerClass(),
+ source.getLogger(),
+ source.getTimeStamp(),
+ source.getLevel(),
+ newMsg,
+ source.getThreadName(),
+ source.getThrowableInformation(),
+ source.getNDC(),
+ source.getLocationInformation(),
+ rewriteProps);
+ }
+ } catch (Exception e) {
+ LogLog.warn("Unable to get property descriptors", e);
+ }
+
+ }
+ return source;
+ }
+}
Added: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java (added)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,199 @@
+/*
+ * 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.log4j.rewrite;
+
+import org.apache.log4j.Appender;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.helpers.AppenderAttachableImpl;
+import org.apache.log4j.spi.AppenderAttachable;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.OptionHandler;
+import org.apache.log4j.xml.UnrecognizedElementHandler;
+import org.w3c.dom.Element;
+
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ * This appender forwards a logging request to another
+ * appender after possibly rewriting the logging event.
+ *
+ * This appender (with the appropriate policy)
+ * replaces the MapFilter, PropertyFilter and ReflectionFilter
+ * from log4j 1.3.
+ */
+public class RewriteAppender extends AppenderSkeleton
+ implements AppenderAttachable, UnrecognizedElementHandler {
+ /**
+ * Rewrite policy.
+ */
+ private RewritePolicy policy;
+ /**
+ * Nested appenders.
+ */
+ private final AppenderAttachableImpl appenders;
+
+ public RewriteAppender() {
+ appenders = new AppenderAttachableImpl();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void append(final LoggingEvent event) {
+ LoggingEvent rewritten = event;
+ if (policy != null) {
+ rewritten = policy.rewrite(event);
+ }
+ if (rewritten != null) {
+ synchronized (appenders) {
+ appenders.appendLoopOnAppenders(rewritten);
+ }
+ }
+ }
+
+ /**
+ * Add appender.
+ *
+ * @param newAppender appender to add, may not be null.
+ */
+ public void addAppender(final Appender newAppender) {
+ synchronized (appenders) {
+ appenders.addAppender(newAppender);
+ }
+ }
+
+ /**
+ * Get iterator over attached appenders.
+ * @return iterator or null if no attached appenders.
+ */
+ public Enumeration getAllAppenders() {
+ synchronized (appenders) {
+ return appenders.getAllAppenders();
+ }
+ }
+
+ /**
+ * Get appender by name.
+ *
+ * @param name name, may not be null.
+ * @return matching appender or null.
+ */
+ public Appender getAppender(final String name) {
+ synchronized (appenders) {
+ return appenders.getAppender(name);
+ }
+ }
+
+
+ /**
+ * Close this <code>AsyncAppender</code> by interrupting the dispatcher
+ * thread which will process all pending events before exiting.
+ */
+ public void close() {
+ closed = true;
+ //
+ // close all attached appenders.
+ //
+ synchronized (appenders) {
+ Enumeration iter = appenders.getAllAppenders();
+
+ if (iter != null) {
+ while (iter.hasMoreElements()) {
+ Object next = iter.nextElement();
+
+ if (next instanceof Appender) {
+ ((Appender) next).close();
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Determines if specified appender is attached.
+ * @param appender appender.
+ * @return true if attached.
+ */
+ public boolean isAttached(final Appender appender) {
+ synchronized (appenders) {
+ return appenders.isAttached(appender);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean requiresLayout() {
+ return false;
+ }
+
+ /**
+ * Removes and closes all attached appenders.
+ */
+ public void removeAllAppenders() {
+ synchronized (appenders) {
+ appenders.removeAllAppenders();
+ }
+ }
+
+ /**
+ * Removes an appender.
+ * @param appender appender to remove.
+ */
+ public void removeAppender(final Appender appender) {
+ synchronized (appenders) {
+ appenders.removeAppender(appender);
+ }
+ }
+
+ /**
+ * Remove appender by name.
+ * @param name name.
+ */
+ public void removeAppender(final String name) {
+ synchronized (appenders) {
+ appenders.removeAppender(name);
+ }
+ }
+
+
+ public void setRewritePolicy(final RewritePolicy rewritePolicy) {
+ policy = rewritePolicy;
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public boolean parseUnrecognizedElement(final Element element,
+ final Properties props) throws Exception {
+ final String nodeName = element.getNodeName();
+ if ("rewritePolicy".equals(nodeName)) {
+ Object rewritePolicy =
+ org.apache.log4j.xml.DOMConfigurator.parseElement(
+ element, props, RewritePolicy.class);
+ if (rewritePolicy != null) {
+ if (rewritePolicy instanceof OptionHandler) {
+ ((OptionHandler) rewritePolicy).activateOptions();
+ }
+ this.setRewritePolicy((RewritePolicy) rewritePolicy);
+ }
+ return true;
+ }
+ return false;
+ }
+
+}
Added: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java (added)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,37 @@
+package org.apache.log4j.rewrite;
+
+import org.apache.log4j.spi.LoggingEvent;
+
+/*
+* 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.
+*/
+
+/**
+ * This interface is implemented to provide a rewrite
+ * strategy for RewriteAppender. RewriteAppender will
+ * call the rewrite method with a source logging event.
+ * The strategy may return that event, create a new event
+ * or return null to suppress the logging request.
+ */
+public interface RewritePolicy {
+ /**
+ * Rewrite a logging event.
+ * @param source a logging event that may be returned or
+ * used to create a new logging event.
+ * @return a logging event or null to suppress processing.
+ */
+ LoggingEvent rewrite(final LoggingEvent source);
+}
Added: logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java (added)
+++ logging/log4j/companions/receivers/trunk/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java Fri Aug 10 21:11:27 2007
@@ -0,0 +1,131 @@
+/*
+ * 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.log4j.rewrite;
+
+import junit.framework.*;
+import org.apache.log4j.*;
+import org.apache.log4j.util.Compare;
+import org.apache.log4j.xml.*;
+
+import java.io.InputStream;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Hashtable;
+import javax.xml.parsers.*;
+import org.w3c.dom.*;
+
+public class RewriteAppenderTest extends TestCase {
+ public RewriteAppenderTest(final String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ LogManager.getLoggerRepository().resetConfiguration();
+ Hashtable context = MDC.getContext();
+ if (context != null) {
+ context.clear();
+ }
+ }
+
+ public void tearDown() {
+ LogManager.getLoggerRepository().shutdown();
+ }
+
+ public void configure(final String resourceName) throws Exception {
+ InputStream is = RewriteAppenderTest.class.getResourceAsStream(resourceName);
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(false);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document doc = builder.parse(is);
+ DOMConfigurator.configure(doc.getDocumentElement());
+ }
+
+
+ public void testMapPolicy() throws Exception {
+ configure("map.xml");
+ Logger logger = Logger.getLogger(RewriteAppenderTest.class);
+ logger.info("Message 0");
+ MDC.put("p1", "Hola");
+
+ Map msg = new HashMap();
+ msg.put("p1", "Hello");
+ msg.put("p2", "World");
+ msg.put("x1", "Mundo");
+ logger.info(msg);
+ msg.put("message", "Message 1");
+ logger.info(msg);
+ assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "map.log"));
+ }
+
+ private static class BaseBean {
+ private final Object p2;
+ private final Object x1;
+
+ public BaseBean(final Object p2,
+ final Object x1) {
+ this.p2 = p2;
+ this.x1 = x1;
+ }
+
+ public Object getP2() {
+ return p2;
+ }
+
+ public Object getX1() {
+ return x1;
+ }
+
+ public String toString() {
+ return "I am bean.";
+ }
+ }
+
+ private static class MessageBean extends BaseBean {
+ private final Object msg;
+
+ public MessageBean(final Object msg,
+ final Object p2,
+ final Object x1) {
+ super(p2, x1);
+ this.msg = msg;
+ }
+
+ public Object getMessage() {
+ return msg;
+ }
+ }
+
+ public void testReflectionPolicy() throws Exception {
+ configure("reflection.xml");
+ Logger logger = Logger.getLogger(RewriteAppenderTest.class);
+ logger.info("Message 0");
+ logger.info(new BaseBean("Hello", "World" ));
+ MDC.put("p1", "Hola");
+ MDC.put("p2", "p2");
+ logger.info(new MessageBean("Welcome to The Hub", "Hello", "World" ));
+ assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "reflection.log"));
+ }
+
+ public void testPropertyPolicy() throws Exception {
+ configure("property.xml");
+ Logger logger = Logger.getLogger(RewriteAppenderTest.class);
+ logger.info("Message 0");
+ MDC.put("p1", "Hola");
+ logger.info("Message 1");
+ assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "property.log"));
+ }
+}
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.log
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.log?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.log (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.log Fri Aug 10 21:11:27 2007
@@ -0,0 +1,3 @@
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2: Message 0
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World {p1=Hello, x1=Mundo, p2=World}
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World Message 1
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.xml?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.xml (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/map.xml Fri Aug 10 21:11:27 2007
@@ -0,0 +1,38 @@
+<!--
+ 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.
+
+-->
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+ <appender name="F1" class="org.apache.log4j.FileAppender">
+ <param name="file" value="temp"/>
+ <param name="append" value="false"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
+ </layout>
+ </appender>
+
+
+ <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
+ <appender-ref ref="F1"/>
+ <rewritePolicy class="org.apache.log4j.rewrite.MapRewritePolicy"/>
+ </appender>
+
+ <root>
+ <level value ="debug" />
+ <appender-ref ref="A1" />
+ </root>
+
+</log4j:configuration>
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.log
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.log?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.log (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.log Fri Aug 10 21:11:27 2007
@@ -0,0 +1,2 @@
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World Message 0
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hola p2:World Message 1
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.xml?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.xml (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/property.xml Fri Aug 10 21:11:27 2007
@@ -0,0 +1,40 @@
+<!--
+ 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.
+
+-->
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+ <appender name="F1" class="org.apache.log4j.FileAppender">
+ <param name="file" value="temp"/>
+ <param name="append" value="false"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
+ </layout>
+ </appender>
+
+
+ <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
+ <appender-ref ref="F1"/>
+ <rewritePolicy class="org.apache.log4j.rewrite.PropertyRewritePolicy">
+ <param name="properties" value="p1=Hello,p2=World,x1=3.1415"/>
+ </rewritePolicy>
+ </appender>
+
+ <root>
+ <level value ="debug" />
+ <appender-ref ref="A1" />
+ </root>
+
+</log4j:configuration>
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.log
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.log?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.log (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.log Fri Aug 10 21:11:27 2007
@@ -0,0 +1,3 @@
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2: Message 0
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2:Hello I am bean.
+INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hola p2:Hello Welcome to The Hub
Added: logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.xml
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.xml?view=auto&rev=564831
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.xml (added)
+++ logging/log4j/companions/receivers/trunk/src/test/resources/org/apache/log4j/rewrite/reflection.xml Fri Aug 10 21:11:27 2007
@@ -0,0 +1,38 @@
+<!--
+ 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.
+
+-->
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+ <appender name="F1" class="org.apache.log4j.FileAppender">
+ <param name="file" value="temp"/>
+ <param name="append" value="false"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
+ </layout>
+ </appender>
+
+
+ <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
+ <appender-ref ref="F1"/>
+ <rewritePolicy class="org.apache.log4j.rewrite.ReflectionRewritePolicy"/>
+ </appender>
+
+ <root>
+ <level value ="debug" />
+ <appender-ref ref="A1" />
+ </root>
+
+</log4j:configuration>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org