From a4c302bbb5a3780eef8d654273a640716afc3e47 Mon Sep 17 00:00:00 2001 From: "David M. Lloyd" Date: Wed, 17 Jun 2020 09:31:29 -0500 Subject: [PATCH] Handle publication errors property --- .../java/org/jboss/logmanager/LoggerNode.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/jboss/logmanager/LoggerNode.java b/core/src/main/java/org/jboss/logmanager/LoggerNode.java index a80f8e5d..8c31e7b5 100644 --- a/core/src/main/java/org/jboss/logmanager/LoggerNode.java +++ b/core/src/main/java/org/jboss/logmanager/LoggerNode.java @@ -24,6 +24,7 @@ import org.wildfly.common.ref.Reaper; import org.wildfly.common.ref.Reference; +import java.lang.reflect.UndeclaredThrowableException; import java.util.Collection; import java.util.Enumeration; import java.util.Iterator; @@ -31,6 +32,7 @@ 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; @@ -46,6 +48,7 @@ public void reap(Reference reference) { reference.getAttachment().activeLoggers.remove(reference); } }; + private static final StackTraceElement[] EMPTY_STACK = new StackTraceElement[0]; /** * The log context. @@ -386,7 +389,22 @@ void publish(final ExtLogRecord record) { } catch (VirtualMachineError e) { throw e; } catch (Throwable t) { - // todo - error handler + ErrorManager errorManager = 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;