This is an automated email from the ASF dual-hosted git repository.
ckozak pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/release-2.x by this push:
new 43add80 LOG4J2-2659: AbstractAction handles unchecked
RuntimeException and Error (#297)
43add80 is described below
commit 43add80dc20f1b9b177037a67a062fc598459c48
Author: Carter Kozak <[email protected]>
AuthorDate: Fri Jul 19 16:03:48 2019 -0400
LOG4J2-2659: AbstractAction handles unchecked RuntimeException and Error
(#297)
---
.../appender/rolling/action/AbstractAction.java | 6 ++-
.../rolling/action/AbstractActionTest.java | 43 ++++++++++++++++++++--
src/changes/changes.xml | 3 ++
3 files changed, 47 insertions(+), 5 deletions(-)
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java
index 214308e..c18163a 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.java
@@ -64,8 +64,12 @@ public abstract class AbstractAction implements Action {
if (!interrupted) {
try {
execute();
- } catch (final IOException ex) {
+ } catch (final RuntimeException | IOException ex) {
reportException(ex);
+ } catch (final Error e) {
+ // reportException takes Exception, widening to Throwable
would break custom implementations
+ // so we wrap Errors in RuntimeException for handling.
+ reportException(new RuntimeException(e));
}
complete = true;
diff --git
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
index 0f76119..6a70448 100644
---
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
+++
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
@@ -35,11 +35,46 @@ public class 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();
+ assertEquals(1, statusDataList.size());
+ StatusData statusData = statusDataList.get(0);
+ assertEquals(Level.WARN, statusData.getLevel());
+ String formattedMessage = statusData.getFormattedStatus();
+ assertTrue(formattedMessage.contains("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();
+ assertEquals(1, statusDataList.size());
+ StatusData statusData = statusDataList.get(0);
+ assertEquals(Level.WARN, statusData.getLevel());
+ String formattedMessage = statusData.getFormattedStatus();
+ assertTrue(formattedMessage.contains("Exception reported by action"));
+ }
+
private static final class TestAction extends AbstractAction {
@Override
- public boolean execute() {
- this.reportException(new IOException("failed"));
- return false;
+ public boolean execute() throws IOException {
+ throw new IOException("failed");
}
}
-}
\ No newline at end of file
+}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bd4fd19..45a9b51 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,6 +43,9 @@
AbstractAction.reportException records a warning to the status logger,
providing more information when file
based appenders fail to compress rolled data asynchronously.
</action>
+ <action issue="LOG4J2-2659" dev="ckozak" type="fix">
+ AbstractAction handles and records unchecked RuntimeException and
Error in addition to IOException.
+ </action>
</release>
<release version="2.12.0" date="2019-06-23" description="GA Release
2.12.0">
<action issue="LOG4J2-2547" dev="rgoers" type="fix">