java处理日志信息demo_【Java学习笔记】日志操作

1.简介:

ava.util.logging,它可以对程序中的日志记录进行相当复杂的控制。例如:通过它可以指定日志的级别和日志的位置(控制台、文件、套接字、 内存缓冲区),也可以创建子记录器,通过它可以用程序控制的方式来指定想记录的内容,也可以使用配置文件来指定,而不需要去改动程序。

2.体系:

951276eab00830b62c9d5e3a6ade62d2.png

3.实例:

import java.util.logging.Logger;

import java.util.logging.Level;

import java.util.logging.Handler;

import java.util.logging.FileHandler;

import java.io.IOException;

public class LogDemo3 {

static Logger logger = Logger.getLogger("");

public static void main(String arg[]) {

try {

FileHandler fh = new FileHandler("logfile");

logger.addHandler(fh);

} catch(IOException e) {

System.err.println("Cannot open log file for output");

}

Handler handler[] = logger.getHandlers();

for(int i=0; i

handler[i].setLevel(Level.FINEST);

logger.setLevel(Level.FINEST);

LogDemo3 ld = new LogDemo3();

ld.demonstrate();

}

LogDemo3() {

logger.info("LogDemo3 instantiated.");

}

public void demonstrate() {

logger.fine("Entering the demonstrate method.");

for(int i=0; i<10; i++) {

logger.finest("Loop counter: " + i);

}

logger.fine("Exiting the demonstrate method.");

}

}

4.技巧(转载)

java .util .logging 包提供了强大的日志输出功能,正确和有效的使用这些功能需要一些技巧: 使用Logger.isLoggable(Level ) 方法检测当前的Level ,以此来判断是否输出日志,日志也应该遵循需要时才输出的原则,避免生成大量的调试信息字符串,占用系统内存,影响性能。

必要时程序化的打开和关闭日志,例如在开发程序时开启大部分日志,为了查错和调试程序,在程序发布时关闭大部分日志,避免影响客户和影响程序性能。

必要时可以针对一个模块使用唯一的Logger ,也就是创建Logger 时传入子模块的名字,所有类使用同一个Logger ,避免生成太多的Logger 实例。

下边是使用日志工具的一段代码:

package  javatest;

import java .io.IOException;

import java .util .logging .ConsoleHandler;

import java .util .logging .FileHandler;

import java .util .logging .Level ;

import java .util .logging .Logger;

import java .util .logging .SimpleFormatter;

/**

*/

public class  LoggerTest {

//  构建Logger

private static  Logger log  =  Logger.getLogger(LoggerTest. class .getName());

/**  Creates a new instance of LoggerTest  */

public  LoggerTest() {

//  使用此方法避免生成需要输出的字符串

if (log.isLoggable(Level .FINE)) {

log.log(Level .FINE,  " start constructing... " );

}

}

/**

* 设置指定包的日志输出级别.

*

*  @param  packageName 指定的包

*  @param  fileName 指定日志的输出文件

*  @param level  日志输出级别

*/

private static void  setLogLevel(String packageName, String fileName, Level level ) {

try  {

FileHandler fileHandler  = new  FileHandler( " %h/ " + fileName + " %u.log " );

fileHandler.setFormatter( new  SimpleFormatter());

ConsoleHandler consoleHandler  = new  ConsoleHandler();

consoleHandler.setLevel(level );

Logger.getLogger(packageName).addHandler(fileHandler);

Logger.getLogger(packageName).addHandler(consoleHandler);

Logger.getLogger(packageName).setLevel(level );

}  catch  (SecurityException ex) {

ex.printStackTrace();

}  catch  (IOException ex) {

ex.printStackTrace();

}

}

public static void  main(String[] args) {

//  启用当前包的全部日志输出

String packageName  = " javatest " ;

setLogLevel(packageName, packageName, Level .ALL);

LoggerTest test  = new  LoggerTest();

}

}

分享到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值