Merge pull request #17107 from L00kian
* gh-17107: Polish "Migrate LogbackLoggingSystemTests to JUnit 5" Migrate LogbackLoggingSystemTests to JUnit 5 Closes gh-17107
This commit is contained in:
commit
a5f4302649
|
|
@ -16,18 +16,18 @@
|
|||
|
||||
package org.springframework.boot.logging;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Base for {@link LoggingSystem} tests.
|
||||
*
|
||||
* @author Ilya Lukyanovich
|
||||
* @author Phillip Webb
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
|
|
@ -35,24 +35,21 @@ public abstract class AbstractLoggingSystemTests {
|
|||
|
||||
private static final String JAVA_IO_TMPDIR = "java.io.tmpdir";
|
||||
|
||||
@Rule
|
||||
public TemporaryFolder temp = new TemporaryFolder();
|
||||
|
||||
private String originalTempFolder;
|
||||
|
||||
@Before
|
||||
public void configureTempDir() throws IOException {
|
||||
@BeforeEach
|
||||
void configureTempDir(@TempDir Path temp) {
|
||||
this.originalTempFolder = System.getProperty(JAVA_IO_TMPDIR);
|
||||
System.setProperty(JAVA_IO_TMPDIR, this.temp.newFolder().getAbsolutePath());
|
||||
System.setProperty(JAVA_IO_TMPDIR, temp.toAbsolutePath().toString());
|
||||
}
|
||||
|
||||
@After
|
||||
public void reinstateTempDir() {
|
||||
@AfterEach
|
||||
void reinstateTempDir() {
|
||||
System.setProperty(JAVA_IO_TMPDIR, this.originalTempFolder);
|
||||
}
|
||||
|
||||
@After
|
||||
public void clear() {
|
||||
@AfterEach
|
||||
void clear() {
|
||||
System.clearProperty(LoggingSystemProperties.LOG_FILE);
|
||||
System.clearProperty(LoggingSystemProperties.PID_KEY);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,17 +24,18 @@ import java.util.Locale;
|
|||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.logging.AbstractLoggingSystemTests;
|
||||
import org.springframework.boot.logging.LogLevel;
|
||||
import org.springframework.boot.logging.LoggerConfiguration;
|
||||
import org.springframework.boot.logging.LoggingSystem;
|
||||
import org.springframework.boot.logging.LoggingSystemProperties;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureRule;
|
||||
import org.springframework.boot.testsupport.system.CapturedOutput;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureExtension;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
|
@ -48,49 +49,46 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
|||
* @author Phillip Webb
|
||||
* @author Ben Hale
|
||||
*/
|
||||
public class JavaLoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
class JavaLoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
|
||||
private static final FileFilter SPRING_LOG_FILTER = (pathname) -> pathname.getName().startsWith("spring.log");
|
||||
|
||||
private final JavaLoggingSystem loggingSystem = new JavaLoggingSystem(getClass().getClassLoader());
|
||||
|
||||
@Rule
|
||||
public OutputCaptureRule output = new OutputCaptureRule();
|
||||
|
||||
private Logger logger;
|
||||
|
||||
private Locale defaultLocale;
|
||||
|
||||
@Before
|
||||
public void init() throws SecurityException {
|
||||
@BeforeEach
|
||||
void init() throws SecurityException {
|
||||
this.logger = Logger.getLogger(getClass().getName());
|
||||
this.defaultLocale = Locale.getDefault();
|
||||
Locale.setDefault(Locale.ENGLISH);
|
||||
this.logger = Logger.getLogger(getClass().getName());
|
||||
}
|
||||
|
||||
@After
|
||||
public void clearLocale() {
|
||||
Locale.setDefault(this.defaultLocale);
|
||||
}
|
||||
|
||||
@After
|
||||
public void resetLogger() {
|
||||
@AfterEach
|
||||
void resetLogger() {
|
||||
this.logger.setLevel(Level.OFF);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void restoreLocale() {
|
||||
Locale.setDefault(this.defaultLocale);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noFile() {
|
||||
void noFile(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(new File(tmpDir() + "/spring.log").exists()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withFile() {
|
||||
void withFile(CapturedOutput output) {
|
||||
File temp = new File(tmpDir());
|
||||
File[] logFiles = temp.listFiles(SPRING_LOG_FILTER);
|
||||
for (File file : logFiles) {
|
||||
|
|
@ -100,66 +98,62 @@ public class JavaLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(temp.listFiles(SPRING_LOG_FILTER).length).isGreaterThan(0);
|
||||
assertThat(temp.listFiles(SPRING_LOG_FILTER)).hasSizeGreaterThan(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCustomFormatter() {
|
||||
void testCustomFormatter(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world").contains("???? INFO [");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSystemPropertyInitializesFormat() {
|
||||
void testSystemPropertyInitializesFormat(CapturedOutput output) {
|
||||
System.setProperty(LoggingSystemProperties.PID_KEY, "1234");
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null,
|
||||
"classpath:" + ClassUtils.addResourcePathToPackagePath(getClass(), "logging.properties"), null);
|
||||
this.logger.info("Hello world");
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world").contains("1234 INFO [");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonDefaultConfigLocation() {
|
||||
void testNonDefaultConfigLocation(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, "classpath:logging-nondefault.properties", null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("INFO: Hello");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonexistentConfigLocation() {
|
||||
void testNonexistentConfigLocation() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
assertThatIllegalStateException().isThrownBy(
|
||||
() -> this.loggingSystem.initialize(null, "classpath:logging-nonexistent.properties", null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSupportedLevels() {
|
||||
void getSupportedLevels() {
|
||||
assertThat(this.loggingSystem.getSupportedLogLevels()).isEqualTo(
|
||||
EnumSet.of(LogLevel.TRACE, LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR, LogLevel.OFF));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevel() {
|
||||
void setLevel(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.fine("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", LogLevel.DEBUG);
|
||||
this.logger.fine("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevelToNull() {
|
||||
void setLevelToNull(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.fine("Hello");
|
||||
|
|
@ -167,11 +161,11 @@ public class JavaLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
this.logger.fine("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", null);
|
||||
this.logger.fine("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfigurations() {
|
||||
void getLoggingConfigurations() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
@ -181,7 +175,7 @@ public class JavaLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfiguration() {
|
||||
void getLoggingConfiguration() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
|
|||
|
|
@ -29,27 +29,23 @@ import org.apache.logging.log4j.LogManager;
|
|||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.Configuration;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.logging.AbstractLoggingSystemTests;
|
||||
import org.springframework.boot.logging.LogLevel;
|
||||
import org.springframework.boot.logging.LoggerConfiguration;
|
||||
import org.springframework.boot.logging.LoggingSystem;
|
||||
import org.springframework.boot.logging.LoggingSystemProperties;
|
||||
import org.springframework.boot.testsupport.assertj.Matched;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureRule;
|
||||
import org.springframework.boot.testsupport.system.CapturedOutput;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureExtension;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
import static org.assertj.core.api.Assertions.contentOf;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
|
@ -63,35 +59,30 @@ import static org.mockito.Mockito.verify;
|
|||
* @author Andy Wilkinson
|
||||
* @author Ben Hale
|
||||
*/
|
||||
public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
|
||||
@Rule
|
||||
public OutputCaptureRule output = new OutputCaptureRule();
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
|
||||
private final TestLog4J2LoggingSystem loggingSystem = new TestLog4J2LoggingSystem();
|
||||
|
||||
private Logger logger;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
this.loggingSystem.cleanUp();
|
||||
this.logger = LogManager.getLogger(getClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
@After
|
||||
public void clear() {
|
||||
super.clear();
|
||||
@AfterEach
|
||||
void cleanUp() {
|
||||
this.loggingSystem.cleanUp();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noFile() {
|
||||
void noFile(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
Configuration configuration = this.loggingSystem.getConfiguration();
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(new File(tmpDir() + "/spring.log").exists()).isFalse();
|
||||
|
|
@ -99,12 +90,11 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void withFile() {
|
||||
void withFile(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
Configuration configuration = this.loggingSystem.getConfiguration();
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(new File(tmpDir() + "/spring.log").exists()).isTrue();
|
||||
|
|
@ -112,11 +102,10 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNonDefaultConfigLocation() {
|
||||
void testNonDefaultConfigLocation(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, "classpath:log4j2-nondefault.xml", getLogFile(tmpDir() + "/tmp.log", null));
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
Configuration configuration = this.loggingSystem.getConfiguration();
|
||||
assertThat(output).contains("Hello world").contains(tmpDir() + "/tmp.log");
|
||||
assertThat(new File(tmpDir() + "/tmp.log").exists()).isFalse();
|
||||
|
|
@ -126,29 +115,29 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNonexistentConfigLocation() {
|
||||
void testNonexistentConfigLocation() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
assertThatIllegalStateException()
|
||||
.isThrownBy(() -> this.loggingSystem.initialize(null, "classpath:log4j2-nonexistent.xml", null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSupportedLevels() {
|
||||
void getSupportedLevels() {
|
||||
assertThat(this.loggingSystem.getSupportedLogLevels()).isEqualTo(EnumSet.allOf(LogLevel.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevel() {
|
||||
void setLevel(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.debug("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", LogLevel.DEBUG);
|
||||
this.logger.debug("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevelToNull() {
|
||||
void setLevelToNull(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.logger.debug("Hello");
|
||||
|
|
@ -156,11 +145,11 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
this.logger.debug("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", null);
|
||||
this.logger.debug("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfigurations() {
|
||||
void getLoggingConfigurations() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
@ -170,7 +159,7 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfiguration() {
|
||||
void getLoggingConfiguration() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
@ -180,44 +169,43 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void setLevelOfUnconfiguredLoggerDoesNotAffectRootConfiguration() {
|
||||
void setLevelOfUnconfiguredLoggerDoesNotAffectRootConfiguration(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
LogManager.getRootLogger().debug("Hello");
|
||||
this.loggingSystem.setLogLevel("foo.bar.baz", LogLevel.DEBUG);
|
||||
LogManager.getRootLogger().debug("Hello");
|
||||
assertThat(this.output.toString()).doesNotContain("Hello");
|
||||
assertThat(output.toString()).doesNotContain("Hello");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loggingThatUsesJulIsCaptured() {
|
||||
void loggingThatUsesJulIsCaptured(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, null);
|
||||
java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger(getClass().getName());
|
||||
julLogger.severe("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configLocationsWithNoExtraDependencies() {
|
||||
void configLocationsWithNoExtraDependencies() {
|
||||
assertThat(this.loggingSystem.getStandardConfigLocations()).contains("log4j2.properties", "log4j2.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configLocationsWithJacksonDatabind() {
|
||||
void configLocationsWithJacksonDatabind() {
|
||||
this.loggingSystem.availableClasses(ObjectMapper.class.getName());
|
||||
assertThat(this.loggingSystem.getStandardConfigLocations()).contains("log4j2.json", "log4j2.jsn", "log4j2.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configLocationsWithJacksonDataformatYaml() {
|
||||
void configLocationsWithJacksonDataformatYaml() {
|
||||
this.loggingSystem.availableClasses("com.fasterxml.jackson.dataformat.yaml.YAMLParser");
|
||||
assertThat(this.loggingSystem.getStandardConfigLocations()).contains("log4j2.yaml", "log4j2.yml", "log4j2.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configLocationsWithJacksonDatabindAndDataformatYaml() {
|
||||
void configLocationsWithJacksonDatabindAndDataformatYaml() {
|
||||
this.loggingSystem.availableClasses("com.fasterxml.jackson.dataformat.yaml.YAMLParser",
|
||||
ObjectMapper.class.getName());
|
||||
assertThat(this.loggingSystem.getStandardConfigLocations()).contains("log4j2.yaml", "log4j2.yml", "log4j2.json",
|
||||
|
|
@ -225,42 +213,39 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void springConfigLocations() {
|
||||
void springConfigLocations() {
|
||||
String[] locations = getSpringConfigLocations(this.loggingSystem);
|
||||
assertThat(locations).containsExactly("log4j2-spring.properties", "log4j2-spring.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void exceptionsIncludeClassPackaging() {
|
||||
void exceptionsIncludeClassPackaging(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
|
||||
Matcher<String> expectedOutput = containsString("[junit-");
|
||||
this.output.expect(expectedOutput);
|
||||
this.logger.warn("Expected exception", new RuntimeException("Expected"));
|
||||
String fileContents = contentOf(new File(tmpDir() + "/spring.log"));
|
||||
assertThat(fileContents).is(Matched.by(expectedOutput));
|
||||
assertThat(fileContents).contains("[junit-");
|
||||
assertThat(output).contains("[junit-");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beforeInitializeFilterDisablesErrorLogging() {
|
||||
void beforeInitializeFilterDisablesErrorLogging() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
assertThat(this.logger.isErrorEnabled()).isFalse();
|
||||
this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customExceptionConversionWord() {
|
||||
void customExceptionConversionWord(CapturedOutput output) {
|
||||
System.setProperty(LoggingSystemProperties.EXCEPTION_CONVERSION_WORD, "%ex");
|
||||
try {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
|
||||
Matcher<String> expectedOutput = Matchers.allOf(containsString("java.lang.RuntimeException: Expected"),
|
||||
not(containsString("Wrapped by:")));
|
||||
this.output.expect(expectedOutput);
|
||||
this.logger.warn("Expected exception", new RuntimeException("Expected", new RuntimeException("Cause")));
|
||||
String fileContents = contentOf(new File(tmpDir() + "/spring.log"));
|
||||
assertThat(fileContents).is(Matched.by(expectedOutput));
|
||||
assertThat(fileContents).contains("java.lang.RuntimeException: Expected").doesNotContain("Wrapped by:");
|
||||
assertThat(output).contains("java.lang.RuntimeException: Expected").doesNotContain("Wrapped by:");
|
||||
}
|
||||
finally {
|
||||
System.clearProperty(LoggingSystemProperties.EXCEPTION_CONVERSION_WORD);
|
||||
|
|
@ -268,7 +253,7 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void initializationIsOnlyPerformedOnceUntilCleanedUp() {
|
||||
void initializationIsOnlyPerformedOnceUntilCleanedUp() {
|
||||
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
|
||||
PropertyChangeListener listener = mock(PropertyChangeListener.class);
|
||||
loggerContext.addPropertyChangeListener(listener);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
package org.springframework.boot.logging.logback;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.logging.Handler;
|
||||
|
|
@ -29,13 +30,10 @@ import ch.qos.logback.classic.spi.LoggerContextListener;
|
|||
import ch.qos.logback.core.ConsoleAppender;
|
||||
import ch.qos.logback.core.rolling.RollingFileAppender;
|
||||
import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.ILoggerFactory;
|
||||
import org.slf4j.bridge.SLF4JBridgeHandler;
|
||||
import org.slf4j.impl.StaticLoggerBinder;
|
||||
|
|
@ -47,10 +45,8 @@ import org.springframework.boot.logging.LoggerConfiguration;
|
|||
import org.springframework.boot.logging.LoggingInitializationContext;
|
||||
import org.springframework.boot.logging.LoggingSystem;
|
||||
import org.springframework.boot.logging.LoggingSystemProperties;
|
||||
import org.springframework.boot.testsupport.assertj.Matched;
|
||||
import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions;
|
||||
import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureRule;
|
||||
import org.springframework.boot.testsupport.system.CapturedOutput;
|
||||
import org.springframework.boot.testsupport.system.OutputCaptureExtension;
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
|
@ -58,8 +54,6 @@ import org.springframework.util.StringUtils;
|
|||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
import static org.assertj.core.api.Assertions.contentOf;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
|
@ -75,12 +69,8 @@ import static org.mockito.Mockito.verify;
|
|||
* @author Vedran Pavic
|
||||
* @author Robert Thornton
|
||||
*/
|
||||
@RunWith(ModifiedClassPathRunner.class)
|
||||
@ClassPathExclusions("log4j-*.jar")
|
||||
public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
|
||||
@Rule
|
||||
public OutputCaptureRule output = new OutputCaptureRule();
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
||||
|
||||
private final LogbackLoggingSystem loggingSystem = new LogbackLoggingSystem(getClass().getClassLoader());
|
||||
|
||||
|
|
@ -88,41 +78,37 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
|
||||
private LoggingInitializationContext initializationContext;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
this.loggingSystem.cleanUp();
|
||||
this.logger = ((LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory()).getLogger(getClass());
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
this.initializationContext = new LoggingInitializationContext(environment);
|
||||
}
|
||||
|
||||
@Override
|
||||
@After
|
||||
public void clear() {
|
||||
super.clear();
|
||||
@AfterEach
|
||||
void cleanUp() {
|
||||
this.loggingSystem.cleanUp();
|
||||
((LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory()).stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noFile() {
|
||||
void noFile(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(getLineWithText(output, "Hello world")).contains("INFO");
|
||||
assertThat(new File(tmpDir() + "/spring.log").exists()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withFile() {
|
||||
void withFile(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(this.initializationContext, null, getLogFile(null, tmpDir()));
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
File file = new File(tmpDir() + "/spring.log");
|
||||
assertThat(output).contains("Hello world").doesNotContain("Hidden");
|
||||
assertThat(getLineWithText(output, "Hello world")).contains("INFO");
|
||||
|
|
@ -133,35 +119,31 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void defaultConfigConfiguresAConsoleAppender() {
|
||||
void defaultConfigConfiguresAConsoleAppender() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
assertThat(getConsoleAppender()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonDefaultConfigLocation() {
|
||||
int existingOutputLength = this.output.toString().length();
|
||||
void testNonDefaultConfigLocation(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, "classpath:logback-nondefault.xml",
|
||||
getLogFile(tmpDir() + "/tmp.log", null));
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output.substring(existingOutputLength)).doesNotContain("DEBUG");
|
||||
assertThat(output).contains("Hello world").contains(tmpDir() + "/tmp.log");
|
||||
assertThat(output).endsWith("BOOTBOOT");
|
||||
assertThat(output).doesNotContain("DEBUG").contains("Hello world").contains(tmpDir() + "/tmp.log")
|
||||
.endsWith("BOOTBOOT");
|
||||
assertThat(new File(tmpDir() + "/tmp.log").exists()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLogbackSpecificSystemProperty() {
|
||||
void testLogbackSpecificSystemProperty(CapturedOutput output) {
|
||||
System.setProperty("logback.configurationFile", "/foo/my-file.xml");
|
||||
try {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains(
|
||||
"Ignoring 'logback.configurationFile' " + "system property. Please use 'logging.config' instead.");
|
||||
"Ignoring 'logback.configurationFile' system property. Please use 'logging.config' instead.");
|
||||
}
|
||||
finally {
|
||||
System.clearProperty("logback.configurationFile");
|
||||
|
|
@ -169,30 +151,30 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNonexistentConfigLocation() {
|
||||
void testNonexistentConfigLocation() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
assertThatIllegalStateException().isThrownBy(() -> this.loggingSystem.initialize(this.initializationContext,
|
||||
"classpath:logback-nonexistent.xml", null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSupportedLevels() {
|
||||
void getSupportedLevels() {
|
||||
assertThat(this.loggingSystem.getSupportedLogLevels()).isEqualTo(
|
||||
EnumSet.of(LogLevel.TRACE, LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR, LogLevel.OFF));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevel() {
|
||||
void setLevel(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.logger.debug("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", LogLevel.DEBUG);
|
||||
this.logger.debug("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLevelToNull() {
|
||||
void setLevelToNull(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.logger.debug("Hello");
|
||||
|
|
@ -200,11 +182,11 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
this.logger.debug("Hello");
|
||||
this.loggingSystem.setLogLevel("org.springframework.boot", null);
|
||||
this.logger.debug("Hello");
|
||||
assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello")).isEqualTo(1);
|
||||
assertThat(StringUtils.countOccurrencesOf(output.toString(), "Hello")).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfigurations() {
|
||||
void getLoggingConfigurations() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
@ -214,7 +196,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfiguration() {
|
||||
void getLoggingConfiguration() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
|
|
@ -224,7 +206,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void getLoggingConfigurationForALL() {
|
||||
void getLoggingConfigurationForALL() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
Logger logger = (Logger) StaticLoggerBinder.getSingleton().getLoggerFactory().getLogger(getClass().getName());
|
||||
|
|
@ -235,7 +217,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void systemLevelTraceShouldReturnNativeLevelTraceNotAll() {
|
||||
void systemLevelTraceShouldReturnNativeLevelTraceNotAll() {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.TRACE);
|
||||
|
|
@ -244,28 +226,26 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void loggingThatUsesJulIsCaptured() {
|
||||
void loggingThatUsesJulIsCaptured(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger(getClass().getName());
|
||||
julLogger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello world");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loggingLevelIsPropagatedToJul() {
|
||||
void loggingLevelIsPropagatedToJul(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, null);
|
||||
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
|
||||
java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger(getClass().getName());
|
||||
julLogger.fine("Hello debug world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("Hello debug world");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bridgeHandlerLifecycle() {
|
||||
void bridgeHandlerLifecycle() {
|
||||
assertThat(bridgeHandlerInstalled()).isFalse();
|
||||
this.loggingSystem.beforeInitialize();
|
||||
assertThat(bridgeHandlerInstalled()).isTrue();
|
||||
|
|
@ -274,14 +254,14 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void standardConfigLocations() {
|
||||
void standardConfigLocations() {
|
||||
String[] locations = this.loggingSystem.getStandardConfigLocations();
|
||||
assertThat(locations).containsExactly("logback-test.groovy", "logback-test.xml", "logback.groovy",
|
||||
"logback.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void springConfigLocations() {
|
||||
void springConfigLocations() {
|
||||
String[] locations = getSpringConfigLocations(this.loggingSystem);
|
||||
assertThat(locations).containsExactly("logback-test-spring.groovy", "logback-test-spring.xml",
|
||||
"logback-spring.groovy", "logback-spring.xml");
|
||||
|
|
@ -299,29 +279,27 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testConsolePatternProperty() {
|
||||
void testConsolePatternProperty(CapturedOutput output) {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.pattern.console", "%logger %msg");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
this.loggingSystem.initialize(loggingInitializationContext, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(getLineWithText(output, "Hello world")).doesNotContain("INFO");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLevelPatternProperty() {
|
||||
void testLevelPatternProperty(CapturedOutput output) {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.pattern.level", "X%clr(%p)X");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
this.loggingSystem.initialize(loggingInitializationContext, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(getLineWithText(output, "Hello world")).contains("XINFOX");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFilePatternProperty() {
|
||||
void testFilePatternProperty(CapturedOutput output) {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.pattern.file", "%logger %msg");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -329,13 +307,12 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
LogFile logFile = getLogFile(file.getPath(), null);
|
||||
this.loggingSystem.initialize(loggingInitializationContext, null, logFile);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(getLineWithText(output, "Hello world")).contains("INFO");
|
||||
assertThat(getLineWithText(file, "Hello world")).doesNotContain("INFO");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCleanHistoryOnStartProperty() {
|
||||
void testCleanHistoryOnStartProperty() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.clean-history-on-start", "true");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -348,7 +325,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testCleanHistoryOnStartPropertyWithXmlConfiguration() {
|
||||
void testCleanHistoryOnStartPropertyWithXmlConfiguration() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.clean-history-on-start", "true");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -361,17 +338,17 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFileSizePropertyWithLogbackFileSize() {
|
||||
void testMaxFileSizePropertyWithLogbackFileSize() {
|
||||
testMaxFileSizeProperty("100 MB", "100 MB");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFileSizePropertyWithDataSize() {
|
||||
void testMaxFileSizePropertyWithDataSize() {
|
||||
testMaxFileSizeProperty("15MB", "15 MB");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFileSizePropertyWithBytesValue() {
|
||||
void testMaxFileSizePropertyWithBytesValue() {
|
||||
testMaxFileSizeProperty(String.valueOf(10 * 1024 * 1024), "10 MB");
|
||||
}
|
||||
|
||||
|
|
@ -389,7 +366,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFileSizePropertyWithXmlConfiguration() {
|
||||
void testMaxFileSizePropertyWithXmlConfiguration() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.max-size", "100MB");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -402,7 +379,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testMaxHistoryProperty() {
|
||||
void testMaxHistoryProperty() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.max-history", "30");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -415,7 +392,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testMaxHistoryPropertyWithXmlConfiguration() throws Exception {
|
||||
void testMaxHistoryPropertyWithXmlConfiguration() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.max-history", "30");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
|
|
@ -428,17 +405,17 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testTotalSizeCapPropertyWithLogbackFileSize() {
|
||||
void testTotalSizeCapPropertyWithLogbackFileSize() {
|
||||
testTotalSizeCapProperty("101 MB", "101 MB");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTotalSizeCapPropertyWithDataSize() {
|
||||
void testTotalSizeCapPropertyWithDataSize() {
|
||||
testTotalSizeCapProperty("10MB", "10 MB");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTotalSizeCapPropertyWithBytesValue() {
|
||||
void testTotalSizeCapPropertyWithBytesValue() {
|
||||
testTotalSizeCapProperty(String.valueOf(10 * 1024 * 1024), "10 MB");
|
||||
}
|
||||
|
||||
|
|
@ -456,7 +433,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testTotalSizeCapPropertyWithXmlConfiguration() {
|
||||
void testTotalSizeCapPropertyWithXmlConfiguration() {
|
||||
String expectedSize = "101 MB";
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.file.total-size-cap", expectedSize);
|
||||
|
|
@ -470,29 +447,26 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void exceptionsIncludeClassPackaging() {
|
||||
void exceptionsIncludeClassPackaging(CapturedOutput output) {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.loggingSystem.initialize(this.initializationContext, null, getLogFile(null, tmpDir()));
|
||||
Matcher<String> expectedOutput = containsString("[junit-");
|
||||
this.output.expect(expectedOutput);
|
||||
this.logger.warn("Expected exception", new RuntimeException("Expected"));
|
||||
String fileContents = contentOf(new File(tmpDir() + "/spring.log"));
|
||||
assertThat(fileContents).is(Matched.by(expectedOutput));
|
||||
assertThat(fileContents).contains("[junit-");
|
||||
assertThat(output).contains("[junit-");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customExceptionConversionWord() {
|
||||
void customExceptionConversionWord(CapturedOutput output) {
|
||||
System.setProperty(LoggingSystemProperties.EXCEPTION_CONVERSION_WORD, "%ex");
|
||||
try {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
this.loggingSystem.initialize(this.initializationContext, null, getLogFile(null, tmpDir()));
|
||||
Matcher<String> expectedOutput = Matchers.allOf(containsString("java.lang.RuntimeException: Expected"),
|
||||
not(containsString("Wrapped by:")));
|
||||
this.output.expect(expectedOutput);
|
||||
this.logger.warn("Expected exception", new RuntimeException("Expected", new RuntimeException("Cause")));
|
||||
String fileContents = contentOf(new File(tmpDir() + "/spring.log"));
|
||||
assertThat(fileContents).is(Matched.by(expectedOutput));
|
||||
assertThat(fileContents).contains("java.lang.RuntimeException: Expected").doesNotContain("Wrapped by:");
|
||||
assertThat(output).contains("java.lang.RuntimeException: Expected").doesNotContain("Wrapped by:");
|
||||
}
|
||||
finally {
|
||||
System.clearProperty(LoggingSystemProperties.EXCEPTION_CONVERSION_WORD);
|
||||
|
|
@ -500,7 +474,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void initializeShouldSetSystemProperty() {
|
||||
void initializeShouldSetSystemProperty() {
|
||||
// gh-5491
|
||||
this.loggingSystem.beforeInitialize();
|
||||
this.logger.info("Hidden");
|
||||
|
|
@ -510,7 +484,7 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void initializationIsOnlyPerformedOnceUntilCleanedUp() {
|
||||
void initializationIsOnlyPerformedOnceUntilCleanedUp() {
|
||||
LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
|
||||
LoggerContextListener listener = mock(LoggerContextListener.class);
|
||||
loggerContext.addListener(listener);
|
||||
|
|
@ -527,37 +501,34 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testDateformatPatternProperty() {
|
||||
void testDateformatPatternProperty(CapturedOutput output) {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.pattern.dateformat", "yyyy-MM-dd'T'hh:mm:ss.SSSZ");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(environment);
|
||||
this.loggingSystem.initialize(loggingInitializationContext, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(getLineWithText(output, "Hello world"))
|
||||
.containsPattern("\\d{4}-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noDebugOutputIsProducedByDefault() {
|
||||
void noDebugOutputIsProducedByDefault(CapturedOutput output) {
|
||||
System.clearProperty("logback.debug");
|
||||
this.loggingSystem.beforeInitialize();
|
||||
File file = new File(tmpDir(), "logback-test.log");
|
||||
LogFile logFile = getLogFile(file.getPath(), null);
|
||||
this.loggingSystem.initialize(this.initializationContext, null, logFile);
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).doesNotContain("LevelChangePropagator").doesNotContain("SizeAndTimeBasedFNATP");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void logbackDebugPropertyIsHonored() {
|
||||
void logbackDebugPropertyIsHonored(CapturedOutput output) {
|
||||
System.setProperty("logback.debug", "true");
|
||||
try {
|
||||
this.loggingSystem.beforeInitialize();
|
||||
File file = new File(tmpDir(), "logback-test.log");
|
||||
LogFile logFile = getLogFile(file.getPath(), null);
|
||||
this.loggingSystem.initialize(this.initializationContext, null, logFile);
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(output).contains("LevelChangePropagator").contains("SizeAndTimeBasedFNATP")
|
||||
.contains("DebugLogbackConfigurator");
|
||||
}
|
||||
|
|
@ -584,18 +555,13 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
return (SizeAndTimeBasedRollingPolicy<?>) getFileAppender().getRollingPolicy();
|
||||
}
|
||||
|
||||
private String getLineWithText(File file, String outputSearch) {
|
||||
private String getLineWithText(File file, CharSequence outputSearch) {
|
||||
return getLineWithText(contentOf(file), outputSearch);
|
||||
}
|
||||
|
||||
private String getLineWithText(String output, String outputSearch) {
|
||||
String[] lines = output.split("\\r?\\n");
|
||||
for (String line : lines) {
|
||||
if (line.contains(outputSearch)) {
|
||||
return line;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
private String getLineWithText(CharSequence output, CharSequence outputSearch) {
|
||||
return Arrays.stream(output.toString().split("\\r?\\n")).filter((line) -> line.contains(outputSearch))
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@
|
|||
<suppress files="ModifiedClassPathRunnerExclusionsTests" checks="SpringJUnit5" />
|
||||
<suppress files="[\\/]src[\\/]test[\\/]java[\\/]org[\\/]springframework[\\/]boot[\\/]test[\\/]rule[\\/]" checks="SpringJUnit5" />
|
||||
<suppress files="OutputCaptureRuleTests" checks="SpringJUnit5" />
|
||||
<suppress files="JavaLoggingSystemTests" checks="SpringJUnit5" />
|
||||
<suppress files="Log4J2LoggingSystemTests" checks="SpringJUnit5" />
|
||||
<suppress files="RestClientTestWithComponentIntegrationTests" checks="SpringJUnit5" />
|
||||
<suppress files="SampleJUnitVintageApplicationTests" checks="SpringJUnit5" />
|
||||
<suppress files="[\\/]spring-boot-docs[\\/]" checks="SpringJavadoc" message="\@since" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue