java日志 java.util.logging.Logger用法

来源:互联网 发布:c语言绝对值 编辑:程序博客网 时间:2024/05/18 20:52


     系统性的介绍日志及相关工具,参考http://blog.jobbole.com/51155/

    

1、基本概念

     Logger中有2个比较重要的概念,分别是记录器(Logger)与处理器(Handler),二者分别完成以下功能:

    (1)Logger:记录日志,设置日志级别等。

    (2)Handler:确定输出位置等。


  2、Logger相关

(1)一般通过getLogger来获取对象,而不能通过构造函数直接构造。

static Logger getLogger(String name) 
static Logger getLogger(String name, String resourceBundleName) 
Logger objects may be obtained by calls on one of the getLogger factory methods. These will either create a new Logger or return a suitable existing Logger.由于是通过工作获取到的对象,因此,若所传参数相同,则会返回同一个Logger对象。
(2)关于Logger的命名
Logger names can be arbitrary strings, but they should normally be based on the package name or class name of the logged component, such as java.net or javax.swing.
Logger原则上可以任意命名,但实际上一般是与Logger所在包或者所有类的名称相同。
(3)Logger的级别
  • SEVERE(最高值)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST(最低值)
此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。 
logger默认的级别是INFO,比INFO更低的日志将不显示。通过此属性,可以简单的修改Logger的级别,以达到开关日志的目的。
(4)Logger是具有层级关系的,比如org.abc.def会继承org.abc的一些属性。

3、Handler相关
(1)Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
(2)可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。
(3)默认情况下,使用ConsoleHandler,即将日志输出至控制台。可通过FileHandler,SocketHandler等,将日志导向其它地方。

4、基本示例
(1)输出至控制台
[java] view plain copy
  1. public  static void main(String[] args) {  
  2.           
  3.     final Logger logger = Logger.getLogger("org.jediael.crawl.MyCrawler");  
  4.     logger.info("Begin Crawling, Good Luck!");  
  5.   
  6.   
  7. //为每一个种子url,启动一个线程  
  8.     Thread t = new Thread(new Runnable() {  
  9.         @Override  
  10.         public void run() {  
  11.             logger.info(Thread.currentThread()+" start!!");  
控制台输出如下:
六月 18, 2014 2:49:35 下午 org.jediael.crawl.MyCrawler main
信息: Begin Crawling, Good Luck!
六月 18, 2014 2:49:35 下午 org.jediael.crawl.MyCrawler$2 run
信息: Thread[Thread-1,5,main] start!!
六月 18, 2014 2:49:35 下午 org.jediael.crawl.MyCrawler$2 run
信息: Thread[Thread-4,5,main] start!!
六月 18, 2014 2:49:35 下午 org.jediael.crawl.MyCrawler$2 run
信息: Thread[Thread-3,5,main] start!!
六月 18, 2014 2:49:35 下午 org.jediael.crawl.MyCrawler$2 run
信息: Thread[Thread-2,5,main] start!!

(2)改变logger的级别
默认情况下,logger的级别为Info,它会处理info及其以上级别的日志;若将其提高至waring,则示例1中的日志将不再显示。
[java] view plain copy
  1. public  static void main(String[] args) {  
  2.       
  3.     final Logger logger = Logger.getLogger("org.jediael.crawl.MyCrawler");  
  4.     logger.setLevel(Level.WARNING);  
  5.     logger.info("Begin Crawling, Good Luck!");  
此时控制台无输出

(3)将日志输出至文件
[java] view plain copy
  1. final Logger logger = Logger.getLogger("org.jediael.crawl.MyCrawler");  
  2. logger.setLevel(Level.INFO);      
  3.   
  4. FileHandler fileHandler = new FileHandler("d:\\1.log");  
  5. fileHandler.setLevel(Level.INFO);  
  6.   
  7. logger.addHandler(fileHandler);  
  8.   
  9. logger.info("Begin Crawling, Good Luck!");  

此时日志同时输出至控制台及文件中。注意,未指定文件格式的情况下,日志输出格式为XML。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2014-06-18T15:04:44</date>
  <millis>1403075084407</millis>
  <sequence>0</sequence>
  <logger>org.jediael.crawl.MyCrawler</logger>
  <level>INFO</level>
  <class>org.jediael.crawl.MyCrawler</class>
  <method>main</method>
  <thread>1</thread>
  <message>Begin Crawling, Good Luck!</message>
</record>
<record>
  <date>2014-06-18T15:04:44</date>
  <millis>1403075084471</millis>
  <sequence>1</sequence>
若需要改变日志的输出格式,则需要使用Formatter。
如何才能只将日志输出到文件,而不输出至Console?
加上以下语句即可移除console中的输出。
[java] view plain copy
  1. logger.setUseParentHandlers(false);  
0 0
原创粉丝点击