@Override public void append(final LogEvent event) { LogStatement statement = new LogStatement(); statement.setLevel(LoggerLevel.fromLevel(event.getLevel())); statement.setLoggerName(event.getLoggerName()); Message msg = event.getMessage(); statement.setMessage((msg instanceof ReusableMessage ? ((ReusableMessage) msg).memento() : msg).getFormattedMessage()); statement.setTimeMillis(event.getTimeMillis()); if (event.getThrown() != null) { statement.setStackTrace(ExceptionUtils2.getFullStackTrace(event.getThrown())); } statement.setThreadId(event.getThreadId()); statement.setThreadName(event.getThreadName()); statement.setThreadPriority(event.getThreadPriority()); this.statements.add(statement); }
public List<LogStatement> getLastLogStatements(final String appender, final long lastStatementTime) { List<LogStatement> result = new ArrayList<>(); getService(LoggerService.class).getLastLogStatements(appender).stream(). filter(statement -> statement.getTimeMillis() > lastStatementTime). forEachOrdered(statement -> { result.add(statement); }); return result; }
switch (statement.getLevel()) { case DEBUG: type = Alert.Type.Success; add(new Label("logger", Model.of(statement.getLoggerName()))); add(new Label("instant", Model.of(FORMAT.format(statement.getTimeMillis())))); add(new Label("message", Model.of(statement.getMessage()))); collapse.setVisible(StringUtils.isNotBlank(statement.getStackTrace())); collapse.add(new JQueryUIBehavior( "#" + collapse.getMarkupId(), "accordion", new Options("active", false).set("collapsible", true))); add(collapse); Label stacktrace = new Label("stacktrace", Model.of(statement.getStackTrace())); stacktrace.setOutputMarkupId(true); collapse.add(stacktrace);
@Override protected void onPostProcessTarget(final AjaxRequestTarget target) { // save scroll position target.prependJavaScript( String.format("window.scrollTop = $('#%s').scrollTop();", stContainer.getMarkupId())); List<LogStatement> recentLogStatements = appenders.getModelObject() == null ? new ArrayList<>() : restClient.getLastLogStatements(appenders.getModelObject(), lastTimeInMillis.getObject()); if (!recentLogStatements.isEmpty()) { lastTimeInMillis.setObject(recentLogStatements.get(recentLogStatements.size() - 1).getTimeMillis()); int currentSize = statementView.getModelObject().size(); int recentSize = recentLogStatements.size(); List<LogStatement> newModelObject = SetUniqueList.<LogStatement>setUniqueList( new ArrayList<>(MAX_STATEMENTS_PER_APPENDER)); if (currentSize <= MAX_STATEMENTS_PER_APPENDER - recentSize) { newModelObject.addAll(statementView.getModelObject()); } else { newModelObject.addAll(statementView.getModelObject(). subList(currentSize - (MAX_STATEMENTS_PER_APPENDER - recentSize), currentSize)); } newModelObject.addAll(recentLogStatements); statementViewModel.setObject(newModelObject); target.add(stContainer); } // restore scroll position - might not work perfectly if items were removed from the top target.appendJavaScript( String.format("$('#%s').scrollTop(window.scrollTop);", stContainer.getMarkupId())); } });