blob: b48d274f285350024b3bc82203751225dcb9a1dc [file] [log] [blame]
package org.apache.logging.log4j.core.appender.rolling.action;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.test.junit.StatusLoggerLevel;
import org.apache.logging.log4j.status.StatusData;
import org.apache.logging.log4j.status.StatusLogger;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.assertEquals;
@StatusLoggerLevel("WARN")
public class AbstractActionTest {
// Test for LOG4J2-2658
@Test
public void testExceptionsAreLoggedToStatusLogger() {
StatusLogger statusLogger = StatusLogger.getLogger();
statusLogger.clear();
new TestAction().run();
List<StatusData> statusDataList = statusLogger.getStatusData();
assertThat(statusDataList, hasSize(1));
StatusData statusData = statusDataList.get(0);
assertEquals(Level.WARN, statusData.getLevel());
String formattedMessage = statusData.getFormattedStatus();
assertThat(formattedMessage, containsString("Exception reported by action 'class org.apache."
+ "logging.log4j.core.appender.rolling.action.AbstractActionTest$TestAction' java.io.IOException: "
+ "failed" + System.lineSeparator()
+ "\tat org.apache.logging.log4j.core.appender.rolling.action.AbstractActionTest"
+ "$TestAction.execute(AbstractActionTest.java:"));
}
@Test
public void testRuntimeExceptionsAreLoggedToStatusLogger() {
StatusLogger statusLogger = StatusLogger.getLogger();
statusLogger.clear();
new AbstractAction() {
@Override
public boolean execute() {
throw new IllegalStateException();
}
}.run();
List<StatusData> statusDataList = statusLogger.getStatusData();
assertThat(statusDataList, hasSize(1));
StatusData statusData = statusDataList.get(0);
assertEquals(Level.WARN, statusData.getLevel());
String formattedMessage = statusData.getFormattedStatus();
assertThat(formattedMessage, containsString("Exception reported by action"));
}
@Test
public void testErrorsAreLoggedToStatusLogger() {
StatusLogger statusLogger = StatusLogger.getLogger();
statusLogger.clear();
new AbstractAction() {
@Override
public boolean execute() {
throw new AssertionError();
}
}.run();
List<StatusData> statusDataList = statusLogger.getStatusData();
assertThat(statusDataList, hasSize(1));
StatusData statusData = statusDataList.get(0);
assertEquals(Level.WARN, statusData.getLevel());
String formattedMessage = statusData.getFormattedStatus();
assertThat(formattedMessage, containsString("Exception reported by action"));
}
private static final class TestAction extends AbstractAction {
@Override
public boolean execute() throws IOException {
throw new IOException("failed");
}
}
}