package edu.stanford.nlp.util.logging;
import edu.stanford.nlp.util.logging.Redwood.Record;
/**
* Simple interface to determine if a Record matches a set of criteria.
* Inner classes provide some common filtering operations. Other simple
* and generate purpose LogFilters should be added here as well.
*
* @author David McClosky
*/
public interface LogFilter {
boolean matches(Record message);
class HasChannel implements LogFilter {
private Object matchingChannel;
public HasChannel(Object message) {
this.matchingChannel = message;
}
@Override
public boolean matches(Record record) {
for (Object tag : record.channels()) {
if (tag.equals(matchingChannel)) {
return true;
}
}
return false;
}
}
/**
* Propagate records containing certain substrings. Note that this
* doesn't require Records to have String messages since it will call
* toString() on them anyway.
*/
class ContainsMessage implements LogFilter {
private String substring;
public ContainsMessage(String message) {
this.substring = message;
}
@Override
public boolean matches(Record record) {
String content = record.content.toString();
return content.contains(this.substring);
}
}
/**
* Propagate records when Records match a specific message exactly (equals() is used for comparisons)
*/
class MatchesMessage implements LogFilter {
private Object message;
public MatchesMessage(Object message) {
this.message = message;
}
@Override
public boolean matches(Record record) {
return record.content.equals(message);
}
}
}