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 <cko...@apache.org> Authored: Mon Apr 2 11:49:12 2018 -0400 Committer: Carter Kozak <cko...@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>