[LOG4J2-1147] Add %equalsIgnoreCase to PatternLayout to test and replace
patterns with strings. 


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/13a62572
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/13a62572
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/13a62572

Branch: refs/heads/LOG4J2-1136
Commit: 13a62572004b4efad53094ef7b15388aa07bb6b3
Parents: 8978274
Author: ggregory <[email protected]>
Authored: Thu Oct 1 16:17:43 2015 -0700
Committer: Ralph Goers <[email protected]>
Committed: Sat Oct 3 23:08:06 2015 -0700

----------------------------------------------------------------------
 .../EqualsIgnoreCaseReplacementConverter.java   | 101 +++++++++++++++++++
 ...qualsIgnoreCaseReplacementConverterTest.java |  63 ++++++++++++
 src/changes/changes.xml                         |   3 +
 src/site/xdoc/manual/layouts.xml.vm             |   3 +-
 4 files changed, 169 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/13a62572/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverter.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverter.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverter.java
new file mode 100644
index 0000000..1265108
--- /dev/null
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverter.java
@@ -0,0 +1,101 @@
+/*
+ * 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.logging.log4j.core.pattern;
+
+import java.util.List;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+
+/**
+ * Equals ignore case pattern converter.
+ */
+@Plugin(name = "equalsIgnoreCase", category = PatternConverter.CATEGORY)
+@ConverterKeys({ "equalsIgnoreCase" })
+public final class EqualsIgnoreCaseReplacementConverter extends 
LogEventPatternConverter {
+
+    /**
+     * Gets an instance of the class.
+     *
+     * @param config
+     *            The current Configuration.
+     * @param options
+     *            pattern options, an array of three elements: pattern, 
testString, and substitution.
+     * @return instance of class.
+     */
+    public static EqualsIgnoreCaseReplacementConverter newInstance(final 
Configuration config, final String[] options) {
+        if (options.length != 3) {
+            LOGGER.error("Incorrect number of options on equalsIgnoreCase. 
Expected 3 received " + options.length);
+            return null;
+        }
+        if (options[0] == null) {
+            LOGGER.error("No pattern supplied on equalsIgnoreCase");
+            return null;
+        }
+        if (options[1] == null) {
+            LOGGER.error("No test string supplied on equalsIgnoreCase");
+            return null;
+        }
+        if (options[2] == null) {
+            LOGGER.error("No substitution supplied on equalsIgnoreCase");
+            return null;
+        }
+        final String p = options[1];
+        final PatternParser parser = PatternLayout.createPatternParser(config);
+        final List<PatternFormatter> formatters = parser.parse(options[0]);
+        return new EqualsIgnoreCaseReplacementConverter(formatters, p, 
options[2]);
+    }
+
+    private final List<PatternFormatter> formatters;
+
+    private final String substitution;
+
+    private final String testString;
+
+    /**
+     * Construct the converter.
+     * 
+     * @param formatters
+     *            The PatternFormatters to generate the text to manipulate.
+     * @param testString
+     *            The test string.
+     * @param substitution
+     *            The substitution string.
+     */
+    private EqualsIgnoreCaseReplacementConverter(final List<PatternFormatter> 
formatters, final String testString,
+            final String substitution) {
+        super("equals", "equals");
+        this.testString = testString;
+        this.substitution = substitution;
+        this.formatters = formatters;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void format(final LogEvent event, final StringBuilder toAppendTo) {
+        final StringBuilder buf = new StringBuilder();
+        for (final PatternFormatter formatter : formatters) {
+            formatter.format(event, buf);
+        }
+        final String string = buf.toString();
+        toAppendTo.append(testString.equalsIgnoreCase(string) ? substitution : 
string);
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/13a62572/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
new file mode 100644
index 0000000..26200eb
--- /dev/null
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.logging.log4j.core.pattern;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.util.Strings;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class EqualsIgnoreCaseReplacementConverterTest {
+
+    @Test
+    public void testMarkerReplacement() {
+        testReplacement("%marker", Strings.EMPTY);
+    }
+
+    @Test
+    public void testMarkerSimpleNameReplacement() {
+        testReplacement("%markerSimpleName", Strings.EMPTY);
+    }
+
+    @Test
+    public void testLoggerNameReplacement() {
+        testReplacement("%logger", "aaa[" + 
EqualsIgnoreCaseReplacementConverterTest.class.getName() + "]zzz");
+    }
+
+    private void testReplacement(String tag, String expectedValue) {
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                
.setLoggerName(EqualsIgnoreCaseReplacementConverterTest.class.getName()) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("This is a test")) //
+                .build();
+        final StringBuilder sb = new StringBuilder();
+        final LoggerContext ctx = LoggerContext.getContext();
+        final String[] options = new String[] { "aaa[" + tag + "]zzz", 
"AAA[]ZZZ", expectedValue };
+        final EqualsIgnoreCaseReplacementConverter converter = 
EqualsIgnoreCaseReplacementConverter
+                .newInstance(ctx.getConfiguration(), options);
+        converter.format(event, sb);
+        assertEquals(expectedValue, sb.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/13a62572/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index db5fc73..cd86147 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -30,6 +30,9 @@
       <action issue="LOG4J2-1145" dev="ggregory" type="add">
         Add %equals to PatternLayout to test and replace patterns with 
strings. 
       </action>
+      <action issue="LOG4J2-1147" dev="ggregory" type="add">
+        Add %equalsIgnoreCase to PatternLayout to test and replace patterns 
with strings. 
+      </action>
       <action issue="LOG4J2-1020" dev="mikes" type="fix">
         Possibility to set shutdown timeout on AsyncAppender
       </action>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/13a62572/src/site/xdoc/manual/layouts.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/layouts.xml.vm 
b/src/site/xdoc/manual/layouts.xml.vm
index f05827a..e1c0e12 100644
--- a/src/site/xdoc/manual/layouts.xml.vm
+++ b/src/site/xdoc/manual/layouts.xml.vm
@@ -652,7 +652,8 @@ WARN  [main]: Message 2</pre>
             </tr>
             <tr>
               <td align="center">
-                <b>equals</b>{pattern}{test}{substitution}
+                <b>equals</b>{pattern}{test}{substitution}<br />
+                <b>equalsIgnoreCase</b>{pattern}{test}{substitution}
               </td>
               <td>
                 <p>Replaces occurrences of 'test', a string, with its 
replacement 'substitution' in the

Reply via email to