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>