package client.net.sf.saxon.ce.lib;
/**
* This Log Handler class does not perform logging, instead, it serves to listen
* for the first log event. It then adds required Log Handlers based on the capabilities
* of the host browser before removing itself. This delayed adding of handlers is mainly
* to prevents a popup appearing if there's nothing to log, but it may also *marginally*
* improve performance when no logging is required.
*/
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import client.net.sf.saxon.ce.LogController;
import client.net.sf.saxon.ce.SaxonceApi;
public class ListenerLogHandler extends Handler {
public ListenerLogHandler() {
}
@Override
public void close() {
//No action
}
@Override
public void flush() {
// No action
}
private boolean removed = false;
@Override
public void publish(LogRecord record) {
Logger logger = Logger.getLogger("");
// this handler is no longer needed
logger.removeHandler(this);
// add new required handlers according to browser capabilities - and publish
int handlerIndex = logger.getHandlers().length;
LogController.addRequiredLogHanders(record);
// call publish on newly added handlers - no need because publish is called on them next
//LogController.getJsLogHandler().publish(record); // this handler is missed out - because its first?
Logger localLogger = Logger.getLogger("ListenerLogHandler");
localLogger.log(Level.FINE, "Log handlers added (" + (SaxonceApi.isLogHandlerExternal()? "includes external)": "internal only)"));
}
}