java.util.logging.Logger基础

1. 定义

  java.util.logging.Logger是Java自带的日志类,可以记录程序运行中所产生的日志。通过查看所产生的日志文件,可以分析程序的运行状况,出现异常时,分析及定位异常。

2.简单的例子

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger; public class TestLogger {
public static void main(String[] args) throws IOException{
Logger log = Logger.getLogger(TestLogger.class.getName());
//设置在Console中的输出
ConsoleHandler consoleHandler =new ConsoleHandler();
consoleHandler.setLevel(Level.ALL);
log.addHandler(consoleHandler); //设置输出到文件中
FileHandler fileHandler = new FileHandler("testlog.log", true);
fileHandler.setLevel(Level.SEVERE);
fileHandler.setFormatter(new Formatter(){
public String format(LogRecord record){
SimpleDateFormat sd = new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");
String d = sd.format(new Date());
return d + record.getLevel() + ":" + record.getMessage();
}
});
log.addHandler(fileHandler);
try {
throw new Exception("bbb");
}
catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
log.severe(sw.toString());
}
log.info("aaa");
}
}

3.Logger的级别

  Logger的级别按降序排列如下:
  • SEVERE(最高值)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST(最低值)

  此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。

 
  logger默认的级别是INFO,比INFO更低的日志将不显示。
 
  我们可以通过设置Logger的级别来控制Logger所记录的内容,等级低于所设置的将不会被记录。

4.Handler的使用

  使用Handler可以将日志信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。

  java.util.logging.Handler
       java.util.logging.MemoryHandler 
       java.util.logging.StreamHandler
       java.util.logging.ConsoleHandler 
       java.util.logging.FileHandler
       java.util.logging.SocketHandler

  例子中用到的了ConsoleHandler和FileHandler,控制将日志信息输出到Console和记录到文件中,其它的需要用时可以再去了解。

5.Formatter的使用

  Handler 可以关联一个 Formatter,用于将Logger记录的日志的内容做格式化的输出。

  上面的例子中就定义了一个Formatter,格式化了日志的内容:

  [2015-04-19 19:12:43]SEVERE:java.lang.Exception: bbb
     at logger.TestLogger.main(TestLogger.java:43)

6.异常的处理 

  可以看到上面例子中处理异常时的代码: 

catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
log.severe(sw.toString());
}

  我们希望在日志中记录异常的轨迹,但是printStackTrace默认是不会产生字符串的,却可以接受一个PrintWriter的参数,就可以通过PrintWriter的toString方法来获取异常信息了。

  

 
上一篇:Java日志工具之java.util.logging.Logger


下一篇:java.util.logging.Logger使用详解