use of ch.qos.logback.core.joran.event.SaxEvent in project sling by apache.
the class LogbackManager method configure.
private void configure(ConfiguratorCallback cb) {
long startTime = System.currentTimeMillis();
StatusListener statusListener = new StatusListenerAsList();
if (debug) {
statusListener = new OnConsoleStatusListener();
}
getStatusManager().add(statusListener);
addInfo("Resetting context: " + getLoggerContext().getName());
resetContext(statusListener);
StatusUtil statusUtil = new StatusUtil(getLoggerContext());
JoranConfigurator configurator = createConfigurator();
final List<SaxEvent> eventList = configurator.recallSafeConfiguration();
final long threshold = System.currentTimeMillis();
boolean success = false;
try {
cb.perform(configurator);
if (statusUtil.hasXMLParsingErrors(threshold)) {
cb.fallbackConfiguration(eventList, createConfigurator(), statusListener);
}
addInfo("Context: " + getLoggerContext().getName() + " reloaded.");
success = true;
} catch (Throwable t) {
//Need to catch any error as Logback must work in all scenarios
//The error would be dumped to sysout in later call to Status printer
addError("Error occurred while configuring Logback", t);
} finally {
if (!success) {
cb.fallbackConfiguration(eventList, createConfigurator(), statusListener);
}
getStatusManager().remove(statusListener);
SlingStatusPrinter.printInCaseOfErrorsOrWarnings(getLoggerContext(), resetStartTime, startTime, success);
}
}
use of ch.qos.logback.core.joran.event.SaxEvent in project sling by apache.
the class OsgiInternalAction method trimHeadAndTail.
private static void trimHeadAndTail(SaxEventRecorder recorder) {
// Let's remove the two <included> events before
// adding the events to the player.
List<SaxEvent> saxEventList = recorder.saxEventList;
if (saxEventList.size() == 0) {
return;
}
SaxEvent first = saxEventList.get(0);
if (first != null && first.qName.equalsIgnoreCase(INCLUDED_TAG)) {
saxEventList.remove(0);
}
SaxEvent last = saxEventList.get(recorder.saxEventList.size() - 1);
if (last != null && last.qName.equalsIgnoreCase(INCLUDED_TAG)) {
saxEventList.remove(recorder.saxEventList.size() - 1);
}
}
use of ch.qos.logback.core.joran.event.SaxEvent in project sling by apache.
the class OsgiInternalAction method begin.
@SuppressWarnings("unchecked")
@Override
public void begin(InterpretationContext ec, String name, Attributes attributes) throws ActionException {
ec.addInPlayListener(new ConfigCompleteListener(ec));
populateSubstitutionProperties(ec);
// TO CHECK Should we add the config fragment at end
final Collection<ConfigSourceInfo> providers = getFragmentProviders();
List<SaxEvent> consolidatedEventList = new ArrayList<SaxEvent>();
for (ConfigSourceInfo cp : providers) {
InputSource is = cp.getConfigProvider().getConfigSource();
try {
SaxEventRecorder recorder = new SaxEventRecorder(context);
recorder.recordEvents(is);
// remove the <included> tag from the beginning and </included>
// from the end
trimHeadAndTail(recorder);
consolidatedEventList.addAll(recorder.getSaxEventList());
} catch (JoranException e) {
addError("Error while parsing xml obtained from [" + cp + "]", e);
} finally {
Util.close(is);
}
}
// offset = 2, because we need to get past this element as well as the
// end element
ec.getJoranInterpreter().getEventPlayer().addEventsDynamically(consolidatedEventList, 2);
}
Aggregations