package org.openflexo.logging; import java.util.logging.Level; import java.util.logging.Logger; import org.openflexo.toolbox.StringUtils; public class LoggingFilter { static final Logger logger = Logger.getLogger(LoggingFilter.class.getPackage().getName()); public String filterName; public FilterType type = FilterType.Highlight; public MessageFilterType messageFilterType = MessageFilterType.Contains; public String filteredContent; public Level filteredLevel = null; public SourceFilterType sourceFilterType = null; public String filteredSourceContent; public DateFilterType dateFilterType = null; public String filteredDate1; public String filteredDate2; public String filteredThread; public String filteredStacktrace; public int startSequence = -1; public int endSequence = -1; public static enum FilterType { OnlyKeep, Highlight, Dismiss } public static enum MessageFilterType { Contains, StartsWith, EndsWith } public static enum SourceFilterType { Package, Class, Method } public static enum DateFilterType { Before, After, Between } public LoggingFilter(String filterName) { this.filterName = filterName; } public boolean getHasFilteredMessage() { return messageFilterType != null; } public void setHasFilteredMessage(boolean aFlag) { if (aFlag) { messageFilterType = MessageFilterType.Contains; } else { messageFilterType = null; } } public boolean getHasFilteredLevel() { return filteredLevel != null; } public void setHasFilteredLevel(boolean aFlag) { if (aFlag) { filteredLevel = Level.INFO; } else { filteredLevel = null; } } public boolean getHasFilteredSource() { return sourceFilterType != null; } public void setHasFilteredSource(boolean aFlag) { if (aFlag) { sourceFilterType = SourceFilterType.Class; } else { sourceFilterType = null; } } public boolean getHasFilteredDate() { return dateFilterType != null; } public void setHasFilteredDate(boolean aFlag) { if (aFlag) { dateFilterType = DateFilterType.After; } else { dateFilterType = null; } } public boolean getHasFilteredThread() { return filteredThread != null; } public void setHasFilteredThread(boolean aFlag) { if (aFlag) { filteredThread = "10"; } else { filteredThread = null; } } public boolean getHasFilteredStacktrace() { return filteredStacktrace != null; } public void setHasFilteredStacktrace(boolean aFlag) { if (aFlag) { filteredStacktrace = "Searched content"; } else { filteredStacktrace = null; } } public boolean getHasFilteredSequence() { return startSequence > -1; } public void setHasFilteredSequence(boolean aFlag) { if (aFlag) { startSequence = 0; endSequence = 0; } else { startSequence = -1; endSequence = -1; } } private boolean messageMatches(LogRecord record) { if (StringUtils.isEmpty(record.message)) { return true; } switch (messageFilterType) { case Contains: if (record.message.contains(filteredContent)) { return true; } break; case StartsWith: if (record.message.startsWith(filteredContent)) { return true; } break; case EndsWith: if (record.message.endsWith(filteredContent)) { return true; } break; default: break; } return false; } private boolean sourceMatches(LogRecord record) { switch (sourceFilterType) { case Package: if (record.logger.contains(filteredSourceContent)) { return true; } break; case Class: if (record.classAsString().contains(filteredSourceContent)) { return true; } break; case Method: if (record.methodName.contains(filteredSourceContent)) { return true; } break; default: break; } return false; } private boolean levelMatches(LogRecord record) { return record.level == filteredLevel; } private boolean threadMatches(LogRecord record) { return record.threadAsString().equals(filteredThread); } private boolean stacktraceMatches(LogRecord record) { return record.getStackTraceAsString().contains(filteredStacktrace); } private boolean sequenceMatches(LogRecord record) { return record.sequence >= startSequence && record.sequence <= endSequence; } private boolean dateMatches(LogRecord record) { logger.warning("Not implemented "); return true; } public boolean filterDoesApply(LogRecord record) { if (getHasFilteredMessage()) { if (!messageMatches(record)) { return false; } } if (getHasFilteredLevel()) { if (!levelMatches(record)) { return false; } } if (getHasFilteredDate()) { if (!dateMatches(record)) { return false; } } if (getHasFilteredSequence()) { if (!sequenceMatches(record)) { return false; } } if (getHasFilteredSource()) { if (!sourceMatches(record)) { return false; } } if (getHasFilteredStacktrace()) { if (!stacktraceMatches(record)) { return false; } } if (getHasFilteredThread()) { if (!threadMatches(record)) { return false; } } return true; } public String getFilterDescription() { StringBuffer returned = new StringBuffer(); if (getHasFilteredMessage()) { returned.append("message " + messageFilterType + " " + filteredContent + " "); } if (getHasFilteredLevel()) { returned.append("level=" + filteredLevel + " "); } if (getHasFilteredSource()) { returned.append(sourceFilterType + " contains " + filteredSourceContent + " "); } if (getHasFilteredDate()) { returned.append("date " + dateFilterType + " " + filteredDate1 + (dateFilterType == DateFilterType.Between ? " and " + filteredDate2 : "") + " "); } if (getHasFilteredStacktrace()) { returned.append("stacktrace contains " + filteredStacktrace + " "); } if (getHasFilteredThread()) { returned.append("thread=" + filteredThread + " "); } if (getHasFilteredSequence()) { returned.append("sequence between " + startSequence + " and " + endSequence + " "); } return returned.toString(); } }