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的级别
- SEVERE(最高值)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST(最低值)
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方法来获取异常信息了。