@Override protected void finished(Description description) { deregisterAppender(); }
private static ch.qos.logback.classic.Logger rootLogger() { return getContext().getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); } }
@Override protected void starting(Description description) { registerAppender(); }
private void registerAppender() { appender = new CyclicBufferAppender<ILoggingEvent>(); appender.setMaxSize(logBufferSize); appender.setContext(getContext()); appender.setName("TestLogCollector"); appender.start(); rootLogger().addAppender(appender); }
@Override protected void failed(Throwable e, Description description) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); try { String msg = e.getMessage(); if (msg != null) { pw.println(msg); } pw.printf("=============== Logs for [%s#%s]===================%n", description.getClassName(), description.getMethodName()); pw.print(getLogs()); pw.println("========================================================"); } catch (Throwable t) { System.err.println("Error occurred while fetching test logs"); t.printStackTrace(System.err); } System.err.print(sw.toString()); }
private String getLogs() { if (appender == null) { return "<Logs cannot be determined>"; } PatternLayout layout = createLayout(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < appender.getLength(); i++) { sb.append(layout.doLayout(appender.get(i))); } return sb.toString(); }
private void deregisterAppender() { if (appender != null) { rootLogger().detachAppender(appender); appender.stop(); appender = null; } }
private static PatternLayout createLayout() { PatternLayout pl = new PatternLayout(); pl.setPattern(DEFAULT_PATTERN); pl.setOutputPatternAsHeader(false); pl.setContext(getContext()); pl.start(); return pl; }