编写一个基于日志信息的日志过滤器

ZDNet软件频道 时间:2004-04-13 作者:Builder.com |  我要评论(9)
本文关键词:javatips
Java日志API提供以日志级形式对输出进行过滤的内嵌方法。这个API也支持过滤器的概念。
本文译自Builder.com,未经许可请勿转载

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.

正如你所看到的,编写一个过滤器其实非常的简单。剩下的其余所有工作就只是配置了。



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134