log4j(二)——如何控制日誌信息的輸出?

一:測試環境與log4j(一)——爲何要使用log4j?同樣,這裏再也不重述html

 

二:先看栗子再來下結論java

import org.apache.log4j.*;
import test.log4j.bean.Person;
//by godtrue
public class UseLog4j {
    //日誌記錄器
    private static Logger LOGGER = LogManager.getLogger(UseLog4j.class);
    //循環次數
    private static long CYCLE = 102;
    //程序入口——主函數
    public static void main(String[]args){
        long startTime = System.currentTimeMillis();
        /**
         * 使用自定義的log4j的環境配置
         */

        /**
         * 一:定義日誌信息的格式化方式,Log4J採用相似C語言中的printf函數的打印格式格式化日誌信息,打印參數以下:
         * 1)%t 用來輸出生成該日誌事件的線程的名稱
         * 2)%p 用於輸出日誌事件的優先級,即DEBUG,INFO,WARN,ERROR,FATAL
         * 3)%r 用於輸出從layout(佈局)的構建到日誌事件建立所通過的毫秒數
         * 4)%c 用於輸出日誌事件的category(類別),一般就是所在類的全名
         * 5)%F 用於輸出被髮出日誌記錄請求,其中的文件名
         * 6)%d 用於輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss,SSS},輸出相似:20017年02月18日 22:10:28,921
         * 7)%L 用於輸出日誌事件的發生位置,即在代碼中的行數。舉例:10
         * 8)%l 用於輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
         * 9)%% 用於輸出%標誌
         * 10)%M 用於輸出打印該條日誌的方法名
         * 11)%m 用於輸出代碼中指定的消息
         * 12)%n 用於輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」
         *
         *
         * 當咱們運行程序後發現,由於輸出的日誌信息長短不一,因此對不齊,看起來很差看,那麼有什麼法子呢?log4j也發現這個問題,而且爲咱們提供了格式修飾符
         * 格式修飾符:能夠控制輸出字段的最小字段寬度、最大字段寬度、字段對齊格式,以下所示:
         * 序號 格式修飾符    對齊方式       最小寬度            最大寬度            備註(對%c來使用格式修飾符,因此改變的是類別名稱)
         *
         * 1)  %-20c         左對齊            20                none            用空格右墊,若是類別名稱少於20個字符長
         * 2)  %20c         右對齊            20                none            用空格左墊,若是類別名稱少於20個字符長
         * 3)  %.30c         左對齊            none            30                從開始截斷,若是類別名稱超過30個字符長
         * 4)  %-20.30c     左對齊            20                30                用空格右側墊,若是類別名稱短於20個字符。可是,若是類別名稱長度超過30個字符,那麼從開始截斷。
         * 5)  %20.30c         右對齊            20                30                用空格左側墊,若是類別名稱短於20個字符。可是,若是類別名稱長度超過30個字符,那麼從開始截斷。
         *
         */
        //試驗,並查看日誌格式化後的效果
        //String pattern = "[1]%t - [2]%p - [3]%r - [4]%c - [5]%F - [6]%d  - [7]%L - [8]%l - [9]%% - [10]%M  - [11]%m[12]%n"; //運行程序看看,是否是咱們期待的日誌輸出樣子
        //試驗,並查看日誌格式化後的效果
        String pattern = "[1]%-10p - [2]%10p - [3]%.3p  - [4]%-10.3p - [5]%10.3p 。 %n"; //運行程序看看,是否是咱們期待的日誌輸出樣子

        /**
         * 二:定義日誌輸出的風格樣式,日誌輸出的風格主要有如下幾種(經過官方文檔咱們會發現還有其餘的):
         * 1)org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
         * 2)org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式,這個在個人實際工做中是最經常使用的),
         * 3)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
         * 4)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
         */
        Layout layout = new PatternLayout(pattern);

        /**
         * 三:定義日誌輸出的目的地,日誌輸出的目的地主要中如下幾種(經過官方文檔咱們會發現還有好多種類的):
         * 1)org.apache.log4j.ConsoleAppender(控制檯),
         * 2)org.apache.log4j.FileAppender(文件),
         * 3)org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
         * 4)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件,這個在個人實際工做中也是最經常使用的),
         * 5)org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
         */
        Appender appender= new ConsoleAppender(layout);

        //配置日誌輸出的定義,主要有三點:1:輸出什麼級別的日誌信息,2:將日誌信息輸出到那裏,3:輸出的日誌以什麼格式展現
        BasicConfigurator.configure(appender);

        /**
         * 日誌輸出的級別,主要有如下幾種:
         * 1)ALL    各級包括自定義級別。
         * 2)TRACE    最詳細的信息。通常這些信息只記錄到日誌文件中。自版本1.2.12[3]。
         * 3)DEBUG    流經系統的詳細信息。通常這些信息只記錄到日誌文件中。
         * 4)INFO    使人感興趣的運行時事件(啓動/關閉)。通常這些信息將當即呈如今狀態控制檯上,於是要保守使用,並保持到最低限度。
         * 5)WARN    使用已過期的API,API的濫用,潛在錯誤,其餘不良的或意外的運行時的情況(但不必定是錯誤的)。通常這些信息將當即呈如今狀態控制檯上。
         * 6)ERROR    其餘運行時錯誤或意外狀況。通常這些信息將當即呈如今狀態控制檯上。
         * 7)FATAL    致使應用程序提早終止的嚴重錯誤。通常這些信息將當即呈如今狀態控制檯上。
         * 8)OFF    最高級別,用於關閉日誌記錄。
         *
         * 日誌的級別之間的大小關係如右所示:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
         */
        for(int i=0;i<CYCLE;i++){
            if(i<100){
                try{
                    LOGGER.info(new Person("godtrue",100/i,'M'));//打印對象的信息
                }catch(Exception e){
                    LOGGER.error(i+"歲的小孩還不存在嘛!");//打印對象的信息
                }finally{
                    LOGGER.warn("如今大部分人的年齡都在0到100歲之間的!");//打印對象的信息
                }
            }else{
                LOGGER.info("我是一棵樹,我今年活了"+i+"歲!哈哈,我厲害吧!");//打印對象的信息
            }
        }
        LOGGER.debug("此程序的運行時間是:"+(System.currentTimeMillis()-startTime));//打印程序運行的時間
    }
}

三:結論apache

      1)若是將上述代碼中的註釋所有去掉,你會發現這段代碼實際上是至關的簡單的,註釋是試驗的時候添加上的,也是我想記住的知識點,它們就是使用log4j框架控制日誌輸出的方式了app

      2)上面的代碼有如下幾部分構成框架

           2-1)控制日誌信息輸出格式的——pattern函數

           2-2)控制日誌信息輸出樣式的——layout佈局

           2-3)控制日誌信息輸出目的地的——appenderpost

           2-4)控制日誌信息輸出的——LOGGER,他能夠調用不一樣級別的日誌輸出方法,而後根據配置的日誌輸出級別來控制什麼方法會被調用,這個後面會再次講到的測試

       3)不管是經過配置文件控制,仍是經過程序自己控制,咱們想控制的基本是  2) 所描述的這些部分,這些功能也是一個日誌框架提供的最基本的功能url

相關文章
相關標籤/搜索