ch.qos.logback.core.status.OnPrintStreamStatusListenerBase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of virtdata-lib-realer Show documentation
Show all versions of virtdata-lib-realer Show documentation
With inspiration from other libraries
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.status;
import ch.qos.logback.core.spi.ContextAwareBase;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.util.StatusPrinter;
import java.io.PrintStream;
import java.util.List;
/**
* Print all new incoming status messages on the on the designated PrintStream.
* @author Ceki Gülcü
*/
abstract public class OnPrintStreamStatusListenerBase extends ContextAwareBase implements StatusListener, LifeCycle {
boolean isStarted = false;
static final long DEFAULT_RETROSPECTIVE = 300;
long retrospectiveThresold = DEFAULT_RETROSPECTIVE;
/**
* The prefix to place before each status message
* @since 1.1.10
*/
String prefix;
/**
* The PrintStream used by derived classes
* @return
*/
abstract protected PrintStream getPrintStream();
private void print(Status status) {
StringBuilder sb = new StringBuilder();
if(prefix != null)
sb.append(prefix);
StatusPrinter.buildStr(sb, "", status);
getPrintStream().print(sb);
}
public void addStatusEvent(Status status) {
if (!isStarted)
return;
print(status);
}
/**
* Print status messages retrospectively
*/
private void retrospectivePrint() {
if (context == null)
return;
long now = System.currentTimeMillis();
StatusManager sm = context.getStatusManager();
List statusList = sm.getCopyOfStatusList();
for (Status status : statusList) {
long timestampOfStatusMesage = status.getDate();
if (isElapsedTimeLongerThanThreshold(now, timestampOfStatusMesage)) {
print(status);
}
}
}
private boolean isElapsedTimeLongerThanThreshold(long now, long timestamp) {
long elapsedTime = now - timestamp;
return elapsedTime < retrospectiveThresold;
}
/**
* Invoking the start method can cause the instance to print status messages created less than
* value of retrospectiveThresold.
*/
public void start() {
isStarted = true;
if (retrospectiveThresold > 0) {
retrospectivePrint();
}
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public void setRetrospective(long retrospective) {
this.retrospectiveThresold = retrospective;
}
public long getRetrospective() {
return retrospectiveThresold;
}
public void stop() {
isStarted = false;
}
public boolean isStarted() {
return isStarted;
}
}