Skip to content

Commit

Permalink
Close and remove named handlers on hot reload
Browse files Browse the repository at this point in the history
  • Loading branch information
stuartwdouglas committed Mar 17, 2021
1 parent ce244e1 commit 5b69ffa
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -289,14 +289,27 @@ private static void addToNamedHandlers(Map<String, Handler> namedHandlers, Handl
handlerName));
}
namedHandlers.put(handlerName, handler);
InitialConfigurator.DELAYED_HANDLER.addLoggingCloseTask(new Runnable() {
@Override
public void run() {
handler.close();
}
});
}

private static void addNamedHandlersToCategory(CategoryConfig categoryConfig, Map<String, Handler> namedHandlers,
Logger categoryLogger,
ErrorManager errorManager) {
for (String categoryNamedHandler : categoryConfig.handlers.get()) {
if (namedHandlers.get(categoryNamedHandler) != null) {
categoryLogger.addHandler(namedHandlers.get(categoryNamedHandler));
Handler handler = namedHandlers.get(categoryNamedHandler);
if (handler != null) {
categoryLogger.addHandler(handler);
InitialConfigurator.DELAYED_HANDLER.addLoggingCloseTask(new Runnable() {
@Override
public void run() {
categoryLogger.removeHandler(handler);
}
});
} else {
errorManager.error(String.format("Handler with name '%s' is linked to a category but not configured.",
categoryNamedHandler), null, ErrorManager.GENERIC_FAILURE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
package io.quarkus.bootstrap.logging;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
import java.util.logging.ErrorManager;
import java.util.logging.Formatter;
import java.util.logging.Handler;
Expand All @@ -36,6 +38,7 @@
public class QuarkusDelayedHandler extends ExtHandler {

private final Deque<ExtLogRecord> logRecords = new ArrayDeque<>();
private final List<Runnable> logCloseTasks = new ArrayList<>();

private final int queueLimit;
private volatile boolean buildTimeLoggingActivated = false;
Expand Down Expand Up @@ -135,6 +138,10 @@ public Handler[] setHandlers(final Handler[] newHandlers) throws SecurityExcepti
return result;
}

public void addLoggingCloseTask(Runnable runnable) {
logCloseTasks.add(runnable);
}

public synchronized Handler[] setBuildTimeHandlers(final Handler[] newHandlers) throws SecurityException {
final Handler[] result = super.setHandlers(newHandlers);
buildTimeLoggingActivated = true;
Expand Down Expand Up @@ -177,6 +184,9 @@ public void removeHandler(final Handler handler) throws SecurityException {
@Override
public Handler[] clearHandlers() throws SecurityException {
activated = false;
for (Runnable i : logCloseTasks) {
i.run();
}
return super.clearHandlers();
}

Expand Down

0 comments on commit 5b69ffa

Please sign in to comment.