Skip to content

Commit

Permalink
Handle publication errors properly
Browse files Browse the repository at this point in the history
  • Loading branch information
dmlloyd committed Jun 17, 2020
1 parent 2187390 commit 2a01d4e
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion core/src/main/java/org/jboss/logmanager/LoggerNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,17 @@
import org.wildfly.common.ref.Reaper;
import org.wildfly.common.ref.Reference;

import java.lang.reflect.UndeclaredThrowableException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.logging.ErrorManager;
import java.util.logging.Filter;
import java.util.logging.Handler;
import java.util.logging.Level;
Expand All @@ -46,6 +50,7 @@ public void reap(Reference<Logger, LoggerNode> reference) {
reference.getAttachment().activeLoggers.remove(reference);
}
};
private static final StackTraceElement[] EMPTY_STACK = new StackTraceElement[0];

/**
* The log context.
Expand Down Expand Up @@ -386,7 +391,27 @@ void publish(final ExtLogRecord record) {
} catch (VirtualMachineError e) {
throw e;
} catch (Throwable t) {
// todo - error handler
ErrorManager errorManager = AccessController.doPrivileged(new PrivilegedAction<ErrorManager>() {
@Override
public ErrorManager run() {
return handler.getErrorManager();
}
});
if (errorManager != null) {
Exception e;
if (t instanceof Exception) {
e = (Exception) t;
} else {
e = new UndeclaredThrowableException(t);
e.setStackTrace(EMPTY_STACK);
}
try {
errorManager.error("Handler publication threw an exception", e, ErrorManager.WRITE_FAILURE);
} catch (Throwable t2) {
System.err.println("Handler.reportError caught:");
t2.printStackTrace();
}
}
}
if (useParentHandlers) {
final LoggerNode parent = this.parent;
Expand Down

0 comments on commit 2a01d4e

Please sign in to comment.