qflib 0.98.0

de.qfs.lib.log
Class TreeFilter

java.lang.Object
  |
  +--de.qfs.lib.log.AbstractLogUser
        |
        +--de.qfs.lib.log.TreeFilter
All Implemented Interfaces:
LogFilter, LogUser

public class TreeFilter
extends AbstractLogUser

This class filters log messages based on a tree of log levels. Log levels can be set for methods, classes, packages or even parts thereof.

Whether a message is filtered out depends on the most fine grained log level available for the sending class and method. For example if there is a message from class somePackage.SomeClass, method someMethod at level 5 and there is a setting of 4 for somePackage the message will be filtered out. If there is an additional setting of 6 for somePackage.SomeClass.someMethod, the message will be passed on instead.

To speed up the decision, log levels are cached in an internal hashtable.

Version:
$Revision: 1.14 $
Author:
Gregor Schmid

Inner Class Summary
static class TreeFilter.UnitTest
          Test cases for the TreeFilter class.
 
Field Summary
protected  java.util.Hashtable cache
          The cache for the log levels.
protected  int defaultLevel
          The default level for messages that aren't further defined.
protected  java.util.Hashtable levels
          The hashtable holding the log levels
static char msep
          Used internally as a separator between class and method names.
 
Fields inherited from class de.qfs.lib.log.AbstractLogUser
mode
 
Fields inherited from interface de.qfs.lib.log.LogUser
FILTER_ALL, FILTER_NONE, FILTER_UNUSED, FILTER_USED
 
Constructor Summary
TreeFilter()
          Create a new TreeFilter with mode FILTER_UNUSED.
TreeFilter(int mode, LogWriter writer)
          Create a new TreeFilter.
TreeFilter(LogWriter writer)
          Create a new TreeFilter with mode FILTER_USED.
 
Method Summary
protected  void clearCache(java.lang.String clazz)
          Remove all cache entries for a class or package.
 boolean filter(int level, java.lang.String clazz, java.lang.String method, java.lang.String message)
          Decide, whether a message should be logged.
 int getDefault()
          Get the default level for unknown classes/methods.
 int getLevel(java.lang.String clazz, java.lang.String method)
          Get the level for a message.
protected  int getParentLevel(java.lang.String clazz)
          Get the most detailed level available for a class.
protected  boolean isUseful(LogEntry entry)
          Decide whether a log message is useful and should be passed to the log writer.
protected  void methodAdded(java.lang.String Clazz, java.lang.String method)
          This method is intended to be implemented by a possible subclass.
protected  void removeChildren(java.lang.String clazz, int level)
          Remove all further detailed entries for a class.
 void removeLevel(java.lang.String clazz, java.lang.String method, boolean recurse)
          Unset a level for a class, method pair.
 void setDefault(int defaultLevel)
          Set the default level for unknown classes/methods.
 void setLevel(java.lang.String clazz, java.lang.String method, int level, boolean recurse)
          Set the log level for a class and method, where method may be null to set a general value.
 
Methods inherited from class de.qfs.lib.log.AbstractLogUser
filter, filter, getLogWriter, setFilterMode, setLogWriter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

cache

protected java.util.Hashtable cache
The cache for the log levels.

levels

protected java.util.Hashtable levels
The hashtable holding the log levels

defaultLevel

protected int defaultLevel
The default level for messages that aren't further defined.

msep

public static final char msep
Used internally as a separator between class and method names.
Constructor Detail

TreeFilter

public TreeFilter()
Create a new TreeFilter with mode FILTER_UNUSED.

TreeFilter

public TreeFilter(LogWriter writer)
Create a new TreeFilter with mode FILTER_USED.
Parameters:
writer - The LogWriter to write useful entries to.

TreeFilter

public TreeFilter(int mode,
                  LogWriter writer)
Create a new TreeFilter.
Parameters:
mode - The LogUser mode.
writer - The LogWriter to write useful entries to.
Method Detail

filter

public boolean filter(int level,
                      java.lang.String clazz,
                      java.lang.String method,
                      java.lang.String message)
Decide, whether a message should be logged.
Parameters:
level - The level of the message.
clazz - The name of the sending class.
method - The name of the sending method.
message - The message.
Returns:
True if the message should be logged.

isUseful

protected boolean isUseful(LogEntry entry)
Decide whether a log message is useful and should be passed to the log writer.
Overrides:
isUseful in class AbstractLogUser
Parameters:
entry - The LogEntry to check.
Returns:
True, if the entry is considered useful, false to skip it.

getDefault

public int getDefault()
Get the default level for unknown classes/methods.
Returns:
The default level.

setDefault

public void setDefault(int defaultLevel)
Set the default level for unknown classes/methods.
Parameters:
defaultLevel - The level to set.

getLevel

public int getLevel(java.lang.String clazz,
                    java.lang.String method)
Get the level for a message. If the sending class and method were unknown before, call methodAdded on them.
Parameters:
clazz - The name of the sending class.
method - The originating method.
Returns:
The log level for clazz and method.

setLevel

public void setLevel(java.lang.String clazz,
                     java.lang.String method,
                     int level,
                     boolean recurse)
Set the log level for a class and method, where method may be null to set a general value. If recurse is true, propagate this level to all similar methods.
Parameters:
clazz - The name of the class. Should end with '.' to denote a package.
method - The name of the method. Null for class or package.
level - The level to set.
recurse - If true, set the same level for all further detailed classes and their methods, if false just clear the cache for the depending methods but leave intermediate levels intact.

removeLevel

public void removeLevel(java.lang.String clazz,
                        java.lang.String method,
                        boolean recurse)
Unset a level for a class, method pair.
Parameters:
clazz - The name of the class. Should end with '.' to denote a package.
method - The name of the method. Null for class or package.
recurse - If true, also remove the levels for all further detailed classes and their methods, if false just clear the cache for the depending messages but leave intermediate levels intact.

getParentLevel

protected int getParentLevel(java.lang.String clazz)
Get the most detailed level available for a class.
Parameters:
clazz - The name of the class
Returns:
The level found, or the default level if there is none.

removeChildren

protected void removeChildren(java.lang.String clazz,
                              int level)
Remove all further detailed entries for a class.
Parameters:
clazz - The name of the class.
level - The level to set for leaf entries, i.e. those containing a method as well as a class.

clearCache

protected void clearCache(java.lang.String clazz)
Remove all cache entries for a class or package.
Parameters:
clazz - The name of the class or package.

methodAdded

protected void methodAdded(java.lang.String Clazz,
                           java.lang.String method)
This method is intended to be implemented by a possible subclass. It is called, when the log level for a method cannot be directly resolved from the cache.
Parameters:
clazz - The new class.
method - The new method.

qflib 0.98.0