王朝网络
分享
 
 
 

告别System.out.print()—J2SDK1.4新增Java日志框架(三)

王朝java/jsp·作者佚名  2006-01-08
宽屏版  字体: |||超大  

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是一个抽象类。在J2SDK1.4中,其子类及它们之间的关系见图二。

自定义扩展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

三、配置文件

J2SDK1.4的Java Logging框架的配置文件(Windows):

%J2SDK1.4_HOME%/jre/lig/logging.properties

从配置文件可以看到:

(一) 自定义日志配置文件:

java -Djava.util.logging.config.file=myfile

(二)全局Handler在Java VM启动时被加载。

(二) 全局Handler默认为java.util.logging.ConsoleHandler。

handlers= java.util.logging.ConsoleHandler

所以我们的任何日志记录动作都会在控制台进行显示。

(三) 缺省的消息记录级别为:INFO

.level= INFO

在缺省情况下我们在控制台看不见低于INFO级别的日志消息。

(四) 缺省的Handler消息格式为java.util.logging.SimpleFormatter

四、日志框架在程序测试中的应用

Logger类提供了两个的方法:Logger.entering() ogger.exiting() 。这对我们调试自己的方法调用提供了便利的方式。

例子:

记录方法调用的输入参数和输出参数 方法myMethod将一个int 追加在一个对象之后。

运行该程序应将logging.properties的

java.util.logging.ConsoleHandler.level = INFO

改为:

java.util.logging.ConsoleHandler.level = ALL

import java.util.logging.*;

public class MyClass {

public String myMethod(int p1, Object p2) {

Logger logger = Logger.getLogger("com.mycompany.MyClass");

if (logger.isLoggable(Level.FINER)) {

logger.entering(this.getClass().getName(), "myMethod",

new Object[]{new Integer(p1), p2});

}

String tmp = p2.toString() + p1;

if (logger.isLoggable(Level.FINER)) {

logger.exiting(this.getClass().getName(), "myMethod", tmp);

}

return tmp;

}

public static void main(String args[]) {

MyClass mc = new MyClass();

String rslt = mc.myMethod(123,"Hello");

}

}

后记

J2SDK1.4引入的日志记录框架为构建简易的日志记录系统提供了便利的解决方案。虽然还有期它的一些专用日志包如Log4j,但从简单的打印输出到严密的、可扩展的日志记录框架,J2SDK1.4的日志系统已经足以满足一般的系统开发的要求。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有