Skip to content

Commit

Permalink
[FIXED JENKINS-21029] Periodic flushing of logs to disk.
Browse files Browse the repository at this point in the history
  • Loading branch information
jglick committed Feb 4, 2014
1 parent e7ab14b commit a17c789
Showing 1 changed file with 28 additions and 1 deletion.
Expand Up @@ -15,6 +15,7 @@
import hudson.logging.LogRecorder;
import hudson.model.Computer;
import hudson.model.Node;
import hudson.model.PeriodicWork;
import hudson.remoting.Callable;
import hudson.remoting.VirtualChannel;
import hudson.security.Permission;
Expand All @@ -30,6 +31,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
Expand Down Expand Up @@ -283,7 +285,7 @@ synchronized void publish(LogRecord record) throws IOException {
count = 0;
}
handler.publish(record);
handler.flush();
LogFlusher.scheduleFlush(handler);
}
}

Expand Down Expand Up @@ -320,4 +322,29 @@ private final class CustomHandler extends Handler {

}

@Extension public static final class LogFlusher extends PeriodicWork {

private static final Set<Handler> unflushedHandlers = new HashSet<Handler>();

static synchronized void scheduleFlush(Handler h) {
unflushedHandlers.add(h);
}

@Override public long getRecurrencePeriod() {
return 3000; // 3s
}

@Override protected void doRun() throws Exception {
Handler[] handlers;
synchronized (LogFlusher.class) {
handlers = unflushedHandlers.toArray(new Handler[unflushedHandlers.size()]);
unflushedHandlers.clear();
}
for (Handler h : handlers) {
h.flush();
}
}

}

}

0 comments on commit a17c789

Please sign in to comment.