You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ck...@apache.org on 2018/05/01 02:02:58 UTC

[2/3] logging-log4j2 git commit: Tests for AsyncLoggerContextSelector with AsyncLoggers

Tests for AsyncLoggerContextSelector with AsyncLoggers

Added TestPatternConverters which defines a few simple pattern
converters which are helpful in testing.


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

Branch: refs/heads/release-2.x
Commit: 2446dcf44f0f75818661ba695fabd5a53a188735
Parents: fb45322
Author: Carter Kozak <ck...@apache.org>
Authored: Mon Apr 2 11:49:12 2018 -0400
Committer: Carter Kozak <ck...@apache.org>
Committed: Mon Apr 30 21:43:57 2018 -0400

----------------------------------------------------------------------
 .../log4j/core/TestPatternConverters.java       | 62 ++++++++++++++++
 .../AsyncLoggerConfigWithAsyncEnabledTest.java  | 74 ++++++++++++++++++++
 .../test/resources/AsyncLoggerConfigTest4.xml   | 22 ++++++
 3 files changed, 158 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2446dcf4/log4j-core/src/test/java/org/apache/logging/log4j/core/TestPatternConverters.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/TestPatternConverters.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/TestPatternConverters.java
new file mode 100644
index 0000000..2d7ecc4
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/TestPatternConverters.java
@@ -0,0 +1,62 @@
+package org.apache.logging.log4j.core;
+
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.pattern.ConverterKeys;
+import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
+import org.apache.logging.log4j.util.StringBuilders;
+
+/**
+ * {@link TestPatternConverters} provides {@link LogEventPatternConverter} implementations that may be
+ * useful in tests.
+ */
+public final class TestPatternConverters {
+    private TestPatternConverters() {
+    }
+
+    @Plugin(name = "TestParametersPatternConverter", category = "Converter")
+    @ConverterKeys("testparameters")
+    public static final class TestParametersPatternConverter extends LogEventPatternConverter {
+
+        private TestParametersPatternConverter() {
+            super("Parameters", "testparameters");
+        }
+
+        public static TestParametersPatternConverter newInstance(final String[] options) {
+            return new TestParametersPatternConverter();
+        }
+
+        @Override
+        public void format(final LogEvent event, final StringBuilder toAppendTo) {
+            toAppendTo.append('[');
+            Object[] parameters = event.getMessage().getParameters();
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    StringBuilders.appendValue(toAppendTo, parameters[i]);
+                    if (i != parameters.length - 1) {
+                        toAppendTo.append(',');
+                    }
+                }
+            }
+            toAppendTo.append(']');
+        }
+    }
+
+    @Plugin(name = "TestFormatPatternConverter", category = "Converter")
+    @ConverterKeys("testformat")
+    public static final class TestFormatPatternConverter extends LogEventPatternConverter {
+
+        private TestFormatPatternConverter() {
+            super("Format", "testformat");
+        }
+
+        public static TestFormatPatternConverter newInstance(final String[] options) {
+            return new TestFormatPatternConverter();
+        }
+
+        @Override
+        public void format(final LogEvent event, final StringBuilder toAppendTo) {
+            toAppendTo.append(event.getMessage().getFormat());
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2446dcf4/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java
new file mode 100644
index 0000000..454c08e
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigWithAsyncEnabledTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.async;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.categories.AsyncLoggers;
+import org.apache.logging.log4j.core.CoreLoggerContexts;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+@Category(AsyncLoggers.class)
+public class AsyncLoggerConfigWithAsyncEnabledTest {
+
+    @BeforeClass
+    public static void beforeClass() {
+        System.setProperty("log4j2.is.webapp", "false");
+        System.setProperty("Log4jContextSelector", AsyncLoggerContextSelector.class.getCanonicalName());
+        // Reuse the configuration from AsyncLoggerConfigTest4
+        System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "AsyncLoggerConfigTest4.xml");
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        System.clearProperty("log4j2.is.webapp");
+        System.clearProperty("Log4jContextSelector");
+    }
+
+    @Test
+    public void testParametersAreAvailableToLayout() throws Exception {
+        final File file = new File("target", "AsyncLoggerConfigTest4.log");
+        assertTrue("Deleted old file before test", !file.exists() || file.delete());
+
+        final Logger log = LogManager.getLogger("com.foo.Bar");
+        String format = "Additive logging: {} for the price of {}!";
+        log.info(format, 2, 1);
+        CoreLoggerContexts.stopLoggerContext(file); // stop async thread
+
+        final BufferedReader reader = new BufferedReader(new FileReader(file));
+        final String line1 = reader.readLine();
+        final String line2 = reader.readLine();
+        reader.close();
+        file.delete();
+
+        String expected = "Additive logging: {} for the price of {}! [2,1] Additive logging: 2 for the price of 1!";
+        assertThat(line1, containsString(expected));
+        assertThat(line2, containsString(expected));
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2446dcf4/log4j-core/src/test/resources/AsyncLoggerConfigTest4.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/AsyncLoggerConfigTest4.xml b/log4j-core/src/test/resources/AsyncLoggerConfigTest4.xml
new file mode 100644
index 0000000..22bfd43
--- /dev/null
+++ b/log4j-core/src/test/resources/AsyncLoggerConfigTest4.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="ERROR">
+  <Appenders>
+    <RandomAccessFile name="File"
+          fileName="target/AsyncLoggerConfigTest4.log"
+          bufferedIO="false"
+          immediateFlush="true"
+          append="false">
+      <PatternLayout>
+        <Pattern>%d %p %c{1.} [%t] %testformat %testparameters %m %ex%n</Pattern>
+      </PatternLayout>
+    </RandomAccessFile>
+  </Appenders>
+  <Loggers>
+    <AsyncLogger name="com.foo.Bar" level="trace">
+      <AppenderRef ref="File"/>
+    </AsyncLogger>
+    <AsyncRoot level="info">
+      <AppenderRef ref="File"/>
+    </AsyncRoot>
+  </Loggers>
+</Configuration>