/* * 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.geode.internal.logging.log4j; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.ConfigurationFactory; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.RestoreSystemProperties; import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; import org.apache.geode.internal.logging.LogService; import org.apache.geode.test.junit.categories.IntegrationTest; /** * Tests FastLogger isDebugEnabled and isTraceEnabled with various configurations. * * For filters see https://logging.apache.org/log4j/2.0/manual/filters.html * */ @Category(IntegrationTest.class) public class FastLoggerIntegrationJUnitTest { private static final String TEST_LOGGER_NAME = FastLogger.class.getPackage().getName(); private static final String ENABLED_MARKER_NAME = "ENABLED"; private static final String UNUSED_MARKER_NAME = "UNUSED"; @Rule public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties(); @Rule public final TemporaryFolder temporaryFolder = new TemporaryFolder(); private File configFile; private String configFileLocation; private Logger logger; private LoggerContext appenderContext; private Marker enabledMarker; private Marker unusedMarker; @Before public void setUp() throws Exception { System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY); this.configFile = new File(this.temporaryFolder.getRoot(), "log4j2-test.xml"); this.configFileLocation = this.configFile.toURI().toURL().toString(); this.enabledMarker = MarkerManager.getMarker(ENABLED_MARKER_NAME); this.unusedMarker = MarkerManager.getMarker(UNUSED_MARKER_NAME); setUpLogService(); } @After public void tearDown() { System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY); LogService.reconfigure(); } private void setUpLogService() throws Exception { // Load a base config and do some sanity checks writeSimpleConfigFile(this.configFile, Level.WARN); System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, this.configFileLocation); LogService.reconfigure(); LogService.getLogger().getName(); // This causes the config file to be loaded this.logger = LogService.getLogger(TEST_LOGGER_NAME); this.appenderContext = ((org.apache.logging.log4j.core.Logger) LogService.getRootLogger()).getContext(); assertThat(LogService.getLogger(LogService.BASE_LOGGER_NAME).getLevel(), is(Level.FATAL)); assertThat(this.logger, is(instanceOf(FastLogger.class))); assertThat(this.logger.getLevel(), is(Level.WARN)); } @Test public void debugConfigIsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void traceConfigIsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.TRACE, expectDelegating(true)); } @Test public void infoConfigIsNotDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void warnConfigIsNotDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.WARN, expectDelegating(false)); } @Test public void errorConfigIsNotDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.ERROR, expectDelegating(false)); } @Test public void fatalConfigIsNotDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.FATAL, expectDelegating(false)); } @Test public void fromDebugToInfoSetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void fromInfoToDebugUnsetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void fromDebugToContextWideFilterKeepsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); } @Test public void fromInfoToContextWideFilterSetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); } @Test public void fromContextWideFilterToInfoUnsetsDelegating() throws Exception { verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void fromContextWideFilterToDebugKeepsDelegating() throws Exception { verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void fromDebugToAppenderFilterKeepsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.INFO, expectDelegating(true)); } @Test public void fromInfoToAppenderFilterSetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); verifyIsDelegatingForAppenderFilter(Level.INFO, expectDelegating(true)); } @Test public void fromAppenderFilterToInfoUnsetsDelegating() throws Exception { verifyIsDelegatingForAppenderFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void fromAppenderFilterToDebugKeepsDelegating() throws Exception { verifyIsDelegatingForAppenderFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void fromDebugToLoggerFilterKeepsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); } @Test public void fromInfoToLoggerFilterSetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); } @Test public void fromLoggerFilterToInfoUnsetsDelegating() throws Exception { verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void fromLoggerFilterToDebugKeepsDelegating() throws Exception { verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void fromDebugToAppenderRefFilterKeepsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.INFO, expectDelegating(true)); } @Test public void fromInfoToAppenderRefFilterSetsDelegating() throws Exception { verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); verifyIsDelegatingForAppenderRefFilter(Level.INFO, expectDelegating(true)); } @Test public void fromAppenderRefFilterToInfoUnsetsDelegating() throws Exception { verifyIsDelegatingForAppenderRefFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.INFO, expectDelegating(false)); } @Test public void fromAppenderRefFilterToDebugKeepsDelegating() throws Exception { verifyIsDelegatingForAppenderRefFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForDebugOrLower(Level.DEBUG, expectDelegating(true)); } @Test public void fromContextWideFilterToLoggerFilterKeepsDelegating() throws Exception { verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); } @Test public void fromLoggerFilterToContextWideFilterKeepsDelegating() throws Exception { verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); } @Test public void contextWideFilterIsDelegating() throws Exception { verifyIsDelegatingForContextWideFilter(Level.TRACE, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.WARN, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.ERROR, expectDelegating(true)); verifyIsDelegatingForContextWideFilter(Level.FATAL, expectDelegating(true)); } @Test public void loggerFilterIsDelegating() throws Exception { verifyIsDelegatingForLoggerFilter(Level.TRACE, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.WARN, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.ERROR, expectDelegating(true)); verifyIsDelegatingForLoggerFilter(Level.FATAL, expectDelegating(true)); } @Test public void appenderFilterIsDelegating() throws Exception { verifyIsDelegatingForAppenderFilter(Level.TRACE, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.WARN, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.ERROR, expectDelegating(true)); verifyIsDelegatingForAppenderFilter(Level.FATAL, expectDelegating(true)); } @Test public void appenderRefFilterIsDelegating() throws Exception { verifyIsDelegatingForAppenderRefFilter(Level.TRACE, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.DEBUG, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.INFO, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.WARN, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.ERROR, expectDelegating(true)); verifyIsDelegatingForAppenderRefFilter(Level.FATAL, expectDelegating(true)); } /** * Verifies FastLogger isDelegating if Level is DEBUG or TRACE. * * @param level the log Level * @param expectIsDelegating true if expecting FastLogger.isDelegating to be true */ private void verifyIsDelegatingForDebugOrLower(final Level level, final boolean expectIsDelegating) throws Exception { writeSimpleConfigFile(this.configFile, level); this.appenderContext.reconfigure(); assertThat(this.logger.getLevel(), is(level)); assertThat(this.logger.isTraceEnabled(), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.FATAL))); final boolean delegating = ((FastLogger) this.logger).isDelegating(); assertThat(delegating, is(expectIsDelegating)); assertThat(delegating, is(level.isLessSpecificThan(Level.DEBUG))); assertThat(delegating, is(expectIsDelegating)); } /** * Verifies FastLogger isDelegating if there is a Logger Filter. * * @param level the log Level * @param expectIsDelegating true if expecting FastLogger.isDelegating to be true */ private void verifyIsDelegatingForLoggerFilter(final Level level, final boolean expectIsDelegating) throws Exception { assertThat(expectIsDelegating, is(true)); // always true for Logger Filter writeLoggerFilterConfigFile(this.configFile, level); this.appenderContext.reconfigure(); assertThat(this.logger.getLevel(), is(level)); assertThat(this.logger.isTraceEnabled(), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(((FastLogger) this.logger).isDelegating(), is(expectIsDelegating)); } /** * Verifies FastLogger isDelegating if there is a Context-wide Filter. * * @param level the log Level * @param expectIsDelegating true if expecting FastLogger.isDelegating to be true */ private void verifyIsDelegatingForContextWideFilter(final Level level, final boolean expectIsDelegating) throws Exception { assertThat(expectIsDelegating, is(true)); // always true for Context-wide Filter writeContextWideFilterConfigFile(this.configFile, level); this.appenderContext.reconfigure(); assertThat(this.logger.getLevel(), is(level)); // note: unlike other filters, Context-wide filters are processed BEFORE isEnabled checks assertThat(this.logger.isTraceEnabled(), is(false)); assertThat(this.logger.isDebugEnabled(), is(false)); assertThat(this.logger.isInfoEnabled(), is(false)); assertThat(this.logger.isWarnEnabled(), is(false)); assertThat(this.logger.isErrorEnabled(), is(false)); assertThat(this.logger.isFatalEnabled(), is(false)); assertThat(this.logger.isTraceEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isDebugEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isInfoEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isWarnEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isErrorEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isFatalEnabled(this.enabledMarker), is(true)); assertThat(this.logger.isTraceEnabled(this.unusedMarker), is(false)); assertThat(this.logger.isDebugEnabled(this.unusedMarker), is(false)); assertThat(this.logger.isInfoEnabled(this.unusedMarker), is(false)); assertThat(this.logger.isWarnEnabled(this.unusedMarker), is(false)); assertThat(this.logger.isErrorEnabled(this.unusedMarker), is(false)); assertThat(this.logger.isFatalEnabled(this.unusedMarker), is(false)); assertThat(((FastLogger) this.logger).isDelegating(), is(expectIsDelegating)); } /** * Verifies FastLogger isDelegating if there is a Appender Filter. * * @param level the log Level * @param expectIsDelegating true if expecting FastLogger.isDelegating to be true */ private void verifyIsDelegatingForAppenderFilter(final Level level, final boolean expectIsDelegating) throws Exception { assertThat(expectIsDelegating, is(true)); // always true for Appender Filter writeAppenderFilterConfigFile(this.configFile, level); this.appenderContext.reconfigure(); assertThat(this.logger.getLevel(), is(level)); assertThat(this.logger.isTraceEnabled(), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(((FastLogger) this.logger).isDelegating(), is(expectIsDelegating)); } /** * Verifies FastLogger isDelegating if there is a AppenderRef Filter. * * @param level the log Level * @param expectIsDelegating true if expecting FastLogger.isDelegating to be true */ private void verifyIsDelegatingForAppenderRefFilter(final Level level, final boolean expectIsDelegating) throws Exception { assertThat(expectIsDelegating, is(true)); // always true for AppenderRef Filter writeAppenderRefFilterConfigFile(this.configFile, level); this.appenderContext.reconfigure(); assertThat(this.logger.getLevel(), is(level)); assertThat(this.logger.isTraceEnabled(), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.enabledMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(this.logger.isTraceEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.TRACE))); assertThat(this.logger.isDebugEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.DEBUG))); assertThat(this.logger.isInfoEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.INFO))); assertThat(this.logger.isWarnEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.WARN))); assertThat(this.logger.isErrorEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.ERROR))); assertThat(this.logger.isFatalEnabled(this.unusedMarker), is(level.isLessSpecificThan(Level.FATAL))); assertThat(((FastLogger) this.logger).isDelegating(), is(expectIsDelegating)); } private boolean expectDelegating(final boolean value) { return value; } private static String writeSimpleConfigFile(final File configFile, final Level level) throws IOException { final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Configuration monitorInterval=\"5\">" + "<Appenders><Console name=\"STDOUT\" target=\"SYSTEM_OUT\"/></Appenders>" + "<Loggers>" + "<Logger name=\"" + TEST_LOGGER_NAME + "\" level=\"" + level.name() + "\" additivity=\"true\">" + "<AppenderRef ref=\"STDOUT\"/>" + "</Logger>" + "<Root level=\"FATAL\"/>" + "</Loggers>" + "</Configuration>"; final BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); writer.write(xml); writer.close(); return xml; } private static String writeLoggerFilterConfigFile(final File configFile, final Level level) throws IOException { final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Configuration monitorInterval=\"5\">" + "<Appenders><Console name=\"STDOUT\" target=\"SYSTEM_OUT\"/></Appenders>" + "<Loggers>" + "<Logger name=\"" + TEST_LOGGER_NAME + "\" level=\"" + level.name() + "\" additivity=\"true\">" + "<filters>" + "<MarkerFilter marker=\"" + ENABLED_MARKER_NAME + "\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>" + "</filters>" + "<AppenderRef ref=\"STDOUT\"/>" + "</Logger>" + "<Root level=\"FATAL\"/>" + "</Loggers>" + "</Configuration>"; final BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); writer.write(xml); writer.close(); return xml; } private static String writeContextWideFilterConfigFile(final File configFile, final Level level) throws IOException { final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Configuration monitorInterval=\"5\">" + "<Appenders><Console name=\"STDOUT\" target=\"SYSTEM_OUT\"/></Appenders>" + "<Loggers>" + "<Logger name=\"" + TEST_LOGGER_NAME + "\" level=\"" + level.name() + "\" additivity=\"true\">" + "</Logger>" + "<Root level=\"FATAL\">" + "<AppenderRef ref=\"STDOUT\"/>" + "</Root>" + "</Loggers>" + "<filters>" + "<MarkerFilter marker=\"" + ENABLED_MARKER_NAME + "\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>" + "</filters>" + "</Configuration>"; final BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); writer.write(xml); writer.close(); return xml; } private static String writeAppenderFilterConfigFile(final File configFile, final Level level) throws IOException { final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Configuration monitorInterval=\"5\">" + "<Appenders>" + "<Console name=\"STDOUT\" target=\"SYSTEM_OUT\">" + "<filters>" + "<MarkerFilter marker=\"" + ENABLED_MARKER_NAME + "\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>" + "</filters>" + "</Console>" + "</Appenders>" + "<Loggers>" + "<Logger name=\"" + TEST_LOGGER_NAME + "\" level=\"" + level.name() + "\" additivity=\"true\">" + "</Logger>" + "<Root level=\"FATAL\">" + "<AppenderRef ref=\"STDOUT\"/>" + "</Root>" + "</Loggers>" + "</Configuration>"; final BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); writer.write(xml); writer.close(); return xml; } private static String writeAppenderRefFilterConfigFile(final File configFile, final Level level) throws IOException { final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Configuration monitorInterval=\"5\">" + "<Appenders>" + "<Console name=\"STDOUT\" target=\"SYSTEM_OUT\">" + "</Console>" + "</Appenders>" + "<Loggers>" + "<Logger name=\"" + TEST_LOGGER_NAME + "\" level=\"" + level.name() + "\" additivity=\"true\">" + "</Logger>" + "<Root level=\"FATAL\">" + "<AppenderRef ref=\"STDOUT\">" + "<filters>" + "<MarkerFilter marker=\"" + ENABLED_MARKER_NAME + "\" onMatch=\"ACCEPT\" onMismatch=\"DENY\"/>" + "</filters>" + "</AppenderRef>" + "</Root>" + "</Loggers>" + "</Configuration>"; final BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); writer.write(xml); writer.close(); return xml; } }