【java】java內建的java.util.logging.Logger日誌功能

來源:互聯網
上載者:User

標籤:author   規範   建立   list   extend   filename   一個   show   different   

偶然翻閱到一篇文章,注意到Java內建的Logger日誌功能,特地來細細的看一看,記錄一下。

1.Java內建的日誌功能,預設的配置

  ①Logger的預設配置,位置在JRE安裝目錄下lib中的logging.properties中

  ②logging.properties記錄檔內容如下:

#############################################################      Default Logging Configuration File## You can use a different file by specifying a filename# with the java.util.logging.config.file system property.  # For example java -Djava.util.logging.config.file=myfile#########################################################################################################################      Global properties############################################################# "handlers" specifies a comma separated list of log Handler # classes.  These handlers will be installed during VM startup.# Note that these classes must be on the system classpath.# By default we only configure a ConsoleHandler, which will only# show messages at the INFO and above levels.handlers= java.util.logging.ConsoleHandler# To also add the FileHandler, use the following line instead.#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler# Default global logging level.# This specifies which kinds of events are logged across# all loggers.  For any given facility this global level# can be overriden by a facility specific level# Note that the ConsoleHandler also has a separate level# setting to limit messages printed to the console..level= INFO############################################################# Handler specific properties.# Describes specific configuration info for Handlers.############################################################# default file output is in user‘s home directory.java.util.logging.FileHandler.pattern = %h/java%u.logjava.util.logging.FileHandler.limit = 50000java.util.logging.FileHandler.count = 1java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter# Limit the message that are printed on the console to INFO and above.java.util.logging.ConsoleHandler.level = INFOjava.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter# Example to customize the SimpleFormatter output format # to print one-line log message like this:#     <level>: <log message> [<date/time>]## java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n############################################################# Facility specific properties.# Provides extra control for each logger.############################################################# For example, set the com.xyz.foo logger to only log SEVERE# messages:com.xyz.foo.level = SEVERE
View Code

  關於記錄檔中,需要關注的第一點是:

  

  需要關注的第二點是:

  需要關注的第三點是:

  需要關注的第四點是:

 

2.java.util.logging.Level類設定了記錄層級類的設定

 

可以從API看出來,出了以下的Level各個層級,還有OFF和ALL兩個層級。

如果設定為Level.INFO層級的話,日誌只會顯示INFO以及以上的層級。

 

 

 

 3.Logger的簡單使用

首先明確一點,java.util.logging.Logger的初始化方法

  

static Logger getLogger(String name) 

name代表你的Logger名稱,如果指定getLogeger相同名稱,則僅會建立一個對象

static Logger getLogger(String name, String resourceBundleName) 

name代表你的Logger名稱,resourceBundleName代表本地化的Logger名稱,也就是記錄到本地磁碟的記錄檔中,每一條Logger的名稱

 

接下來,看看效果:

  

package com.sxd.util;import java.util.logging.Level;import java.util.logging.Logger;import org.junit.Test;/** * 測試Java內建的Log日誌功能 * @author sxd * */public class TestLog {        @Test    public void test(){        Logger log1 = Logger.getLogger("log-Test");        log1.setLevel(Level.INFO);        Logger log2 = Logger.getLogger("log-Test");        System.out.println("log1和log2是否相等:"+(log1 == log2));    //true        Logger log3 = Logger.getLogger("log-test");        System.out.println("log1和log3是否相等:"+(log1 == log3));    //false        log3.setLevel(Level.WARNING);                log1.info("info層級列印:info層級的日誌資訊");        log3.info("warning層級列印:info層級的日誌資訊");        //列印不出來        log3.severe("warning層級列印:severe層級的日誌資訊");                            }}
View Code

由此,可以證明,①設定的記錄層級僅能列印到本層級以及進階別的日誌資訊;②同名的Logger僅會建立一個。

 

4.設定FileHandler,為日誌本地化設定

package com.sxd.util;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 org.junit.Test;/** * 測試Java內建的Log日誌功能 * @author sxd * */public class TestLog {        @Test    public void test() throws SecurityException, IOException{        Logger log1 = Logger.getLogger("log-Test");        ConsoleHandler consoleHandler = new ConsoleHandler();        consoleHandler.setLevel(Level.ALL);        log1.addHandler(consoleHandler);                FileHandler fileHandler = new FileHandler("d:/testLog%g.log");        fileHandler.setLevel(Level.WARNING);        log1.addHandler(fileHandler);                log1.info("ALL層級列印:info層級的日誌資訊");        log1.severe("warning層級列印:severe層級日誌資訊");            }}
View Code

控制台:

【注意】這裡控制台列印了兩遍相同的日誌,是因為,java預設的已經設定了一個ConsoleHandler,但是這個層級是INFO層級的。

    而程式中有重新設定了一個新的ConsoleHandler,這個層級是ALL的,兩個不一樣,所以都執行了列印,所以列印了兩遍一模一樣的。

 本地記錄檔:

 

【注意】僅列印了一個日誌,這個根據代碼記錄層級就可以理解。

    關鍵記錄檔是XML格式的內容,是因為上面解釋了FileHandler的相關設定中,預設是XML格式

【注意2】FileHandler指定記錄檔名稱,有以下的規範:

 

 5.為本地化的記錄檔設定自訂的日誌格式

java.util.logging.LogRecord;

java.util.logging.Formatter;

package com.sxd.util;import java.io.IOException;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;import org.junit.Test;/** * 測試Java內建的Log日誌功能 * @author sxd * */public class TestLog {        @Test    public void test() throws SecurityException, IOException{        Logger log1 = Logger.getLogger("log-Test");                FileHandler fileHandler = new FileHandler("d:/testLog%g.log");        fileHandler.setLevel(Level.WARNING);        fileHandler.setFormatter(new MyFormatter());        log1.addHandler(fileHandler);                log1.severe("warning層級列印:severe層級日誌資訊");            }        class MyFormatter extends Formatter{        @Override        public String format(LogRecord record) {            return record.getLoggerName()                     + ">>"                    +record.getLevel()                    +">>"                    +record.getMessage();        }            }    }
View Code

 

 

 

 

=======================================到這裡,告一段落=========================================

【java】java內建的java.util.logging.Logger日誌功能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.