- 论坛徽章:
- 0
|
(四)、Level
Level对象定义了一组日志消息的级别,用于控制日志消息的输出。一个级别对应一个整型值。日志消息级别按照其整数值的大小排定优先级。在Logger对象中设定一个级别,则大于等于该级别的日志消息将会被传递到某个Handler对象进行输出处理。
J2SDK1.4的Java Logging框架中定义了以下消息级别:
级别名称
int值(Windows 2000环境)
OFF
2147483647
SEVERE
1000
WARNING
900
INFO
800
CONFIG
700
FINE
500
FINER
400
FINEST
300
ALL
-2147483648
表一
Level.OFF具有最高的级别。将Logger的Level级别设置成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
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31901/showart_288197.html |
|