org.apache.jmeter.protocol.http.util.accesslog

Class LogFilter

Implemented Interfaces:
Filter, Serializable

public class LogFilter
extends Object
implements Filter, Serializable

Description:

LogFilter is a basic implementation of Filter interface. This implementation will keep a record of the filtered strings to avoid repeating the process unnecessarily.

The current implementation supports replacing the file extension. The reason for supporting this is from first hand experience porting an existing website to Tomcat + JSP. Later on we may want to provide the ability to replace the whole filename. If the need materializes, we can add it later.

Example of how to use it is provided in the main method. An example is provided below.

 testf = new LogFilter();
 String[] incl = { "hello.html", "index.html", "/index.jsp" };
 String[] thefiles = { "/test/hello.jsp", "/test/one/hello.html", "hello.jsp", "hello.htm", "/test/open.jsp",
      "/test/open.html", "/index.jsp", "/index.jhtml", "newindex.jsp", "oldindex.jsp", "oldindex1.jsp",
      "oldindex2.jsp", "oldindex3.jsp", "oldindex4.jsp", "oldindex5.jsp", "oldindex6.jsp", "/test/index.htm" };
 testf.excludeFiles(incl);
 System.out.println(" ------------ exclude test -------------");
 for (int idx = 0; idx < thefiles.length; idx++) {
  boolean fl = testf.isFiltered(thefiles[idx]);
  String line = testf.filter(thefiles[idx]);
  if (line != null) {
     System.out.println("the file: " + line);
  }
 }
 
As a general note. Both isFiltered and filter() have to be called. Calling either one will not produce the desired result. isFiltered(string) will tell you if a string should be filtered. The second step is to filter the string, which will return null if it is filtered and replace any part of the string that should be replaced.

Field Summary

protected boolean
CHANGEEXT
protected members used by class to filter *
protected String[]
EXCFILE
protected ArrayList
EXCPATTERNS
protected String[]
EXCPTRN
protected boolean
FILEFILTER
protected String[]
INCFILE
protected ArrayList
INCPATTERNS
protected String[]
INCPTRN
protected String
NEWEXT
protected String
NEWFILE
protected String
OLDEXT
protected boolean
PTRNFILTER
protected boolean
USEFILE

Constructor Summary

LogFilter()
The default constructor is empty

Method Summary

Pattern
createPattern(String pattern)
create a new pattern object from the string.
boolean
excFile(String text)
Method implements the logic for filtering file name exclusion.
protected boolean
excPattern(String text)
The method assumes by default the text is not excluded.
void
excludeFiles(String[] filenames)
Give the filter a list of files to exclude
void
excludePattern(String[] regexp)
Give the filter a set of regular expressions to filter with for exclusion.
String
filter(String text)
The current implementation checks the boolean if the text should be used or not. isFilter( string) has to be called first.
protected boolean
filterFile(String file)
Filter the file.
protected boolean
filterPattern(String text)
The current implemenation assumes the user has checked the regular expressions so that they don't cancel each other.
boolean
incFile(String text)
Method implements the logic for filtering file name inclusion.
protected boolean
incPattern(String text)
By default, the method assumes the entry is not included, unless it matches.
void
includeFiles(String[] filenames)
Give the filter a list of files to include
void
includePattern(String[] regexp)
Give the filter a set of regular expressions to filter with for inclusion.
boolean
isFiltered(String path, TestElement el)
In the case of log filtering the important thing is whether the log entry should be used.
boolean
replaceExtension(String text)
Method uses indexOf to replace the old extension with the new extesion.
void
reset()
void
setReplaceExtension(String oldext, String newext)
The method will replace the file extension with the new one.

Field Details

CHANGEEXT

protected boolean CHANGEEXT
protected members used by class to filter *

EXCFILE

protected String[] EXCFILE

EXCPATTERNS

protected ArrayList EXCPATTERNS

EXCPTRN

protected String[] EXCPTRN

FILEFILTER

protected boolean FILEFILTER

INCFILE

protected String[] INCFILE

INCPATTERNS

protected ArrayList INCPATTERNS

INCPTRN

protected String[] INCPTRN

NEWEXT

protected String NEWEXT

NEWFILE

protected String NEWFILE

OLDEXT

protected String OLDEXT

PTRNFILTER

protected boolean PTRNFILTER

USEFILE

protected boolean USEFILE

Constructor Details

LogFilter

public LogFilter()
The default constructor is empty

Method Details

createPattern

public Pattern createPattern(String pattern)
create a new pattern object from the string.
Parameters:
pattern -
Returns:
Pattern

excFile

public boolean excFile(String text)
Method implements the logic for filtering file name exclusion. The method iterates through the array and uses indexOf. Once it finds a match, it won't bother with the rest of the filenames in the array.
Parameters:
text -
Returns:
boolean exclude

excPattern

protected boolean excPattern(String text)
The method assumes by default the text is not excluded. If the text matches the pattern, it will then return true.
Parameters:
text -
Returns:
true if text is excluded

excludeFiles

public void excludeFiles(String[] filenames)
Give the filter a list of files to exclude
Specified by:
excludeFiles in interface Filter
Parameters:
filenames -
See Also:
org.apache.jmeter.protocol.http.util.accesslog.Filter.excludeFiles(java.lang.String[])

excludePattern

public void excludePattern(String[] regexp)
Give the filter a set of regular expressions to filter with for exclusion. This method hasn't been fully implemented and test yet. The implementation is not complete.
Specified by:
excludePattern in interface Filter
Parameters:
regexp -

filter

public String filter(String text)
The current implementation checks the boolean if the text should be used or not. isFilter( string) has to be called first.
Specified by:
filter in interface Filter
See Also:
org.apache.jmeter.protocol.http.util.accesslog.Filter.filter(java.lang.String)

filterFile

protected boolean filterFile(String file)
Filter the file. The implementation performs the exclusion first before the inclusion. This means if a file name is in both string arrays, the exclusion will take priority. Depending on how users expect this to work, we may want to change the priority so that inclusion is performed first and exclusion second. Another possible alternative is to perform both inclusion and exclusion. Doing so would make the most sense if the method throws an exception and tells the user the same filename is in both the include and exclude array.
Parameters:
file -
Returns:
boolean

filterPattern

protected boolean filterPattern(String text)
The current implemenation assumes the user has checked the regular expressions so that they don't cancel each other. The basic assumption is the method will return true if the text should be filtered. If not, it will return false, which means it should not be filtered.
Parameters:
text -
Returns:
boolean

incFile

public boolean incFile(String text)
Method implements the logic for filtering file name inclusion. The method iterates through the array and uses indexOf. Once it finds a match, it won't bother with the rest of the filenames in the array.
Parameters:
text -
Returns:
boolean include

incPattern

protected boolean incPattern(String text)
By default, the method assumes the entry is not included, unless it matches. In that case, it will return true.
Parameters:
text -
Returns:
true if text is included

includeFiles

public void includeFiles(String[] filenames)
Give the filter a list of files to include
Specified by:
includeFiles in interface Filter
Parameters:
filenames -
See Also:
org.apache.jmeter.protocol.http.util.accesslog.Filter.includeFiles(java.lang.String[])

includePattern

public void includePattern(String[] regexp)
Give the filter a set of regular expressions to filter with for inclusion. This method hasn't been fully implemented and test yet. The implementation is not complete.
Specified by:
includePattern in interface Filter
Parameters:
regexp -

isFiltered

public boolean isFiltered(String path,
                          TestElement el)
In the case of log filtering the important thing is whether the log entry should be used. Therefore, the method will only return true if the entry should be used. Since the interface defines both inclusion and exclusion, that means by default inclusion filtering assumes all entries are excluded unless it matches. In the case of exlusion filtering, it assumes all entries are included unless it matches, which means it should be excluded.
Specified by:
isFiltered in interface Filter
Parameters:
path -
Returns:
boolean

replaceExtension

public boolean replaceExtension(String text)
Method uses indexOf to replace the old extension with the new extesion. It might be good to use regular expression, but for now this is a simple method. The method isn't designed to replace multiple instances of the text, since that isn't how file extensions work. If the string contains more than one instance of the old extension, only the first instance will be replaced.
Parameters:
text -
Returns:
boolean

reset

public void reset()
Specified by:
reset in interface Filter

setReplaceExtension

public void setReplaceExtension(String oldext,
                                String newext)
The method will replace the file extension with the new one. You can either provide the extension without the period ".", or with. The method will check for period and add it if it isn't present.
Specified by:
setReplaceExtension in interface Filter
See Also:
org.apache.jmeter.protocol.http.util.accesslog.Filter.setReplaceExtension(java.lang.String, java.lang.String)

Copyright © 1998-2010 Apache Software Foundation. All Rights Reserved.