@Test public void narrow() throws Exception { final Logger logger = LogManager.getLogger(OutputStreamManagerTest.class); logger.info("test"); final List<StatusData> statusData = StatusLogger.getLogger().getStatusData(); StatusData data = statusData.get(0); if (data.getMessage().getFormattedMessage().contains("WindowsAnsiOutputStream")) { data = statusData.get(1); } assertEquals(Level.ERROR, data.getLevel()); assertEquals("Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile", data.getMessage().getFormattedMessage()); assertEquals("org.apache.logging.log4j.core.config.ConfigurationException: Configuration has multiple incompatible Appenders pointing to the same resource 'target/multiIncompatibleAppender.log'", data.getThrowable().toString()); }
@Test public void testEmptyAttribute() throws Exception { final Logger logger = LogManager.getLogger(); logger.info("Test"); final StatusData data = StatusLogger.getLogger().getStatusData().get(0); //System.out.println(data.getFormattedStatus()); assertEquals(Level.ERROR, data.getLevel()); assertTrue(data.getMessage().getFormattedMessage().contains("multiple root loggers")); } }
assertEquals("Unable to send HTTP in appender [Http]", error.getMessage().toString());
public class HaltingStatusListener implements StatusListener { public Level getStatusLevel() { return Level.ERROR; } public void log(StatusData data) { throw new BigDealException("Internal log4j error detected: " + data.getMessage()); } }
import org.apache.logging.log4j.status.StatusData; import org.apache.logging.log4j.status.StatusLogger; ... StatusLogger statusLogger = StatusLogger.getLogger(); if (statusLogger.getStatusData().size() > 0) { System.out.printf( "Logged %d messages\n", statusLogger.getStatusData().size() ); // Investigate List<StatusData> if you want for(StatusData data : statusLogger.getStatusData()) { System.out.printf( " Level %s message: %s\n", data.getLevel(), data.getMessage().getFormattedMessage() ); } System.err.println("exiting due to unexpected console status logs"); System.exit(1); }
protected static void checkStaticState(boolean afterClass) throws Exception { if (afterClass) { MockPageCacheRecycler.ensureAllPagesAreReleased(); } MockBigArrays.ensureAllArraysAreReleased(); // ensure no one changed the status logger level on us assertThat(StatusLogger.getLogger().getLevel(), equalTo(Level.WARN)); synchronized (statusData) { try { // ensure that there are no status logger messages which would indicate a problem with our Log4j usage; we map the // StatusData instances to Strings as otherwise their toString output is useless assertThat( statusData.stream().map(status -> status.getMessage().getFormattedMessage()).collect(Collectors.toList()), empty()); } finally { // we clear the list so that status data from other tests do not interfere with tests within the same JVM statusData.clear(); } } }