Java日志API提供以日志级形式对输出进行过滤的内嵌方法。这个API也支持过滤器的概念。
可以在句柄或者日志中加入java.util.logging.Filter。一个过滤器就是一个由开发者提供的具有行为能力的类。
下面给出了一个例子,告诉大家怎么编写一个基于从日志信息中查找到的文本对日志记录进行过滤的日志过滤器。这个过滤器叫做TextFilter,他只有一个属性:the text to filter on。在运行时间内可以用一般的日志配置方法对其进行配置。
必须要执行过滤器界面后才能开始。由于只有一种方法,那就是boolean isLoggable(LogRecord记录),所以java.util.logging.Filter的界面非常简单:
package tips;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Filter;
public class TextFilter implements Filter {
private String text;
public boolean isLoggable(LogRecord
record) {
if
(record.getMessage().indexOf(this.text) != -1) {
return
true;
}
else
{
return
false;
}
}
}
这一段同时也定义了用于过滤记录的文本性质。剩下我们所要做的就是准备进行配置了。为了减少配置的复杂度,过滤器采用ava.util.logging.LogManager中的getProperty 方法。因为过滤器用的是LogManager,所以所有的性质都可以直接从日志性质文件中读取。这些配置将被装载到过滤器构造器中。
public TextFilter() {
String className = TextFilter.class.getName();
this.text =
LogManager.getLogManager().getProperty(className
+ ".text");
}
...
现在需要将过滤器添加到句柄或是日志中,并且需要设置过滤的正文。这里有一个属性文件——tip-log.properties,这个文件是用来配置日志的:
# tip-log.properties
handlers=java.util.logging.ConsoleHandler
.level=FINEST
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter
=
java.util.logging.SimpleFormatter
首先,通过在属性文件中加入下面这条代码,从而对征文性质进行设置,加入的代码如下:
tips.TextFilter.text=dave
为了保持简单性,这个过滤器将被添加到一个定义了的句柄中——ConsoleHandler:
java.util.logging.ConsoleHandler.filter = tips.TextFilter
下面是一个为过滤器提供日志选项的简单类的声明:
package tips;
import java.util.logging.Logger;
public class LogHandlerTip {
private static
Logger log = Logger.getLogger("tips.LogHandlerTip");
public static
void main(String args[]) {
log.finest("the finest message");
log.finer("finer message");
log.fine("a fine message");
log.config("some configuration message");
log.config("dave is great");
log.info("a little bit of information");
log.warning("a warning message");
log.severe("a severe message");
}
}
当所有的都通过了编译之后,用下面这个命令进行测试:
java -Djava.util.logging.config.file=tip-log.properties tips.LogHandlerTip
在命令行中设定系统工具java.util.logging.config.file,从而控制日志框架结构轮换的使用日志性质文件。运行结果输出如下:
Apr 7, 2003 6:41:54 PM tips.LogHandlerTip
main
CONFIG: dave is great.
正如你所看到的,编写一个过滤器其实非常的简单。剩下的其余所有工作就只是配置了。