日誌框架之log4j


筆記:日誌框架之log4j

注意:本文是從mybatis入門實現增刪改查.md中截取出來的文段,可能前後有點突兀,不過對於log4j的使用足夠了。

配置log4j的時候,我們只需要將jar包和配置文件放到相應的位置,就可以看到mybatis輸出sql語句了。
我們將log4j的配置文件log4jfile.properties文件放到src目錄下,mybaits就會識別出我們使用的是那種日誌包,mybatis中
有LogFactory會動態的適配出對應的日誌。
lo4j的配置文件有兩種格式,這裏簡單的使用以下xxx.properties格式
還有一種是基於xml文件格式

xxx.properties都是key=value這種格式,=號兩邊不能有空格

log4j.properties的內容

log4j.rootLogger=DEBUG,Console,file //說明日誌輸出的 級別,位置1,位置2...
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO

語法
其語法爲:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level: 是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或
者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。比如在這裏定 義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來。
appenderName: 就是指定日誌信息輸出到哪個地方。您可以同時指定多個輸出目的地。
例如:log4j.rootLogger=info,A1,B2,C3

1. 日誌的輸出級別

log4j.rootLogger=DEBUG,Console,file 用於說明日誌輸出的級別,位置

其中
log4j.rootLogger爲根logger,這個必須配置,用於指定默認的輸出級別,和定義輸出位置

DEBUG表示輸出級別

級別有8中,級別從小到大 ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF,只有大於和等於設置的級別的日誌纔會輸出
這裏設置DEBUG級別,表示DEBUG,INFO,WARN,ERROR,FATAL級別的信息都會被輸出

各個級別表示的含義

OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE 、ALL
OFF 爲最高等級 關閉了日誌信息
FATAL 爲可能導致應用中止的嚴重事件錯誤
ERROR 爲嚴重錯誤 主要是程序的錯誤
WARN 爲一般警告,比如session丟失
INFO 爲一般要顯示的信息,比如登錄登出
DEBUG 爲程序的調試信息
TRACE 爲比DEBUG更細粒度的事件信息
ALL 爲最低等級,將打開所有級別的日誌

2. 日誌的輸出位置

Console,表示輸出的位置是控制檯
不過輸出位置,並不是完全由這裏決定的,主要的是由類log4j.appender.Console=org.apache.log4j.ConsoleAppender決定
Console只是一個標識符號,沒有什麼意義,只要與log4j.appender.Console中最後一個單詞對應即可,即
可以寫成

log4j.rootLogger=DEBUG,A //說明日誌輸出的 級別,位置
log4j.appender.A=org.apache.log4j.ConsoleAppender

寫成Console只是方便我們辨認

注意:輸出位置可以寫多個,也可以分開寫比如說
log4j.rootLogger=DEBUG,A,B,C,…
後便對每種輸出位置進行設置屬性值

期輸出位置主要有如下幾種

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(將日誌信息以流格式發送到任意指定的地方)

3. 日誌的輸出格式

log4j.appender.Console.layout=org.apache.log4j.PatternLayout是佈局類

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 自定義輸出格式
其中空格 []都會被原樣輸出

%d 表示日誌產生的時間

%t 表示產生日誌的線程名稱

%p 表示日誌的級別,%5p,表示級別信息會佔用5個字符位置,不足5位字符使用空格補齊,%-5p,其中表示右對齊。<

%c 表示出書日誌的全類名

%m 表示輸出的附加信息

%n 表示換行

其他:

%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyyy MM dd HH:mm:ss,SS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c: 輸出日誌信息所屬的類,通常就是所在類的全名
%t: 輸出產生該日誌事件的線程名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%“字符
%F: 輸出日誌消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日誌具體信息
%n: 輸出一個回車換行符,Windows平臺爲”/r/n",Unix平臺爲"/n"輸出日誌信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。

4. 指定的特別包的輸出級別

配置某個包下的特殊的輸出級別
log4j.logger.org.apache=INFO,這裏log4j.logger是固定的,org.apache表示需要特殊處理的包的輸出級別爲INFO

5. 配中多個輸出模式

log4j.rootLogger=DEBUG,Console,file
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#指定org.apache這個包下的類的輸出級別,特別指定某個包的輸出級別
log4j.logger.org.apache=INFO 


log4j.appender.file=org.apache.log4j.RollingFileAppender
#修改指定輸出位置爲法file的輸出級別爲INFO,默認爲DEBUG
log4j.appender.file.Threshold = INFO
log4j.appender.file.File=/home/caojx/temp/log.txt
log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy MM dd} [%t] %-5p [%c] - %m%n
#指定文件最大爲10MB,超過10MB的時候自動生成一個新的文件
log4j.appender.file.MaxFileSize=10MB

上邊有添加一個輸出級別DEBUG信息到文件中,不使用追加模式,如果要使用log4j,至少要配置一個log4j.rootLogger,類似於
log4j.logger.mylogger這種自定義日誌組件的可以配置多個。
注意:=號兩邊不能有空格,有時候文件中不能寫入內容,確認自己沒有寫錯的話,換一個路徑看一下。

6. 使用

package com.imooc.servlet;

import com.imooc.bean.Message;
import com.imooc.service.ListService;
import org.apache.log4j.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * Description:頁面列表初始化
 * Created by caojx on 17-2-1.
 */
public class ListServlet extends HttpServlet {

    //使用log4j進行日誌輸出,這裏簡單的配置一樣就好
    private static Logger logger = Logger.getLogger(ListServlet.class);

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            //獲取查詢參數
            req.setCharacterEncoding("UTF-8");
            String command = req.getParameter("command");
            String description = req.getParameter("description");
            logger.info("queryMessageList開始,查詢參數爲"+command+","+description);
            //查詢消息列表
            List<Message> messages = new ArrayList<Message>();
            ListService listService = new ListService();
            messages = listService.queryMessageList(command,description);

            //將參數和消息列表傳回給頁面
            req.setAttribute("command",command);
            req.setAttribute("description",description);
            req.setAttribute("messages", messages);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("Message查詢出錯",e);
        }
        req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

7. 日誌輸出

運行項目後我們將會在控制檯

在文件中看日誌輸出

推薦文章:
http://blog.csdn.net/edward0830ly/article/details/8250412
http://blog.csdn.net/hu_shengyang/article/details/6754031
http://swiftlet.net/archives/683

發佈了60 篇原創文章 · 獲贊 81 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章