Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98887
  • 博文数量: 26
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-14 13:33
文章分类

全部博文(26)

文章存档

2008年(8)

2007年(18)

我的朋友

分类: Java

2007-04-28 16:29:42

(四)、Level

Level对象定义了一组日志消息的级别,用于控制日志消息的输出。一个级别对应一个整型值。日志消息级别按照其整数值的大小排定优先级。在Logger对象中设定一个级别,则大于等于该级别的日志消息将会被传递到某个Handler对象进行输出处理。

J2SDK1.4Java Logging框架中定义了以下消息级别:

级别名称

int值(Windows 2000环境)

OFF

2147483647

SEVERE

1000

WARNING

900

INFO

800

CONFIG

700

FINE

500

FINER

400

FINEST

300

ALL

-2147483648

                       表一

Level.OFF具有最高的级别。将LoggerLevel级别设置成Level.OFF

让我们看看消息级别是怎样工作的:LoggingLevelTest.java

import java.util.logging.*;

public class LoggingLevelTest {

         public static void main(String args[]) {

                   //使用Logger的静态方法获得一个匿名Logger

                   Logger logger1 = Logger.getAnonymousLogger();

                   //设置Logger对象记录的最低日志消息级别

                   logger1.setLevel(Level.FINER);

                   //记录消息

                   logger1.severe("SEVERE级消息");

                   logger1.warning("WARNING级消息");

                   logger1.config("CONFIG级消息");

                   logger1.info("INFO级消息");

                   logger1.fine("FINE级消息");

                   logger1.finer("FINER级消息");

                   logger1.finest("FINEST级消息");

         }

}

                    实例3

 

运行结果:

 2003-1-15 7:02:03 LoggingLevelTest main

服务器: SEVERE级消息

2003-1-15 7:02:04 LoggingLevelTest main

警告: WARNING级消息

2003-1-15 7:02:04 LoggingLevelTest main

配置: CONFIG级消息

2003-1-15 7:02:04 LoggingLevelTest main

信息: INFO级消息

 

可以看出,优先级低于INFO的日志消息不被记录。

Level的构造函数为protected便于程序员开发自己的消息级别类。

import java.util.logging.*;

//自定义消息级别

class myLevel extends Level{

//定义自己的消息级别SYSE

public static final Level SYSE = new myLevel("SYSE", Level.SEVERE.intValue()+10);

public myLevel(String ln,int v) {

super(ln,v);

         }

}

public class MyLevelTest {

         public static void main(String args[]) {

                   Logger logger1 = Logger.getAnonymousLogger();              

                   //设置消息级别

                   logger1.setLevel(myLevel.SYSE);

                   //记录消息

                   logger1.log(myLevel.SYSE,"SYSE消息");

                   logger1.severe("SVERE消息");

         }

}      

                                     实例4

 

运行结果:

                           

2003-1-15 15:40:04 MyLevelTest main

SYSE: SYSE消息

 

只有SYSE消息被记录,SVERE消息不被记录,因为自定义级别SYSE高于SEVERE.

(五)Formatter

Formatter负责对LogRecords进行格式化。每个记录处理器Handler同一个Formatter对象相关联。Formatter对象接收从Handler传来的LogRecord,将其格式化成字符串后返回给Handler进行输出。

Formatter是一个抽象类。

自定义扩展Formatter类。实例:MyFormatterTest.java

import java.util.Date;

import java.util.logging.*;

 

//创建每条日志记录以行的日志格式:

//时间<空格>消息级别<空格>消息ID<空格>日志信息内容<换行>

class MyFormatter extends Formatter {

       

         public String format(LogRecord rec) {

                   StringBuffer buf = new StringBuffer(1000);

        buf.append(new Date().toLocaleString()); //时间

        buf.append(' ');

        buf.append(rec.getLevel()); //消息级别

        buf.append(' ');

        buf.append(rec.getMillis()); //作为消息ID

        buf.append(' ');

        buf.append(formatMessage(rec));//格式化日志记录数据

        buf.append('\n');    //换行

        return buf.toString();

    }      

}

 

public class MyFormatterTest {

public static void main(String args[]){

         //创建记录器

Logger log1 = Logger.getLogger("MyLogger");

//创建记录处理器

Handler mh = new ConsoleHandler();

//为记录处理器设置Formatter

         mh.setFormatter(new MyFormatter());

         //为记录器添加记录处理器

log1.addHandler(mh);

//禁止消息处理将日志消息上传给父级处理器

log1.setUseParentHandlers(false);

         //记录消息

         log1.severe("消息1");

         log1.warning("消息2");

         log1.info("消息3");

         log1.config("消息4");

}

}

                   实例5

程序运行结果:

 

2003-1-15 16:59:38 SEVERE 1042621178968 消息1

2003-1-15 16:59:40 WARNING 1042621178985 消息2

2003-1-15 16:59:41 INFO 1042621179105 消息3

 

阅读(1096) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~