log4j日志框架學習


初識Log4j:
     log4j有三個部分:
          1.loggers 負責捕獲日志信息。
          2.appenders  負責輸出信息到不同的目的地
          3.layouts 負責使用不同的樣式輸出日志
 
log4j框架中有兩種對象:
     核心對象:框架的支撐對象,是框架必不可少的組成部分。
     支撐對象:這些都是框架可選的對象,用於提供額外重要的工作。
核心對象包括下面幾種類型:
     logger對象,是最高的層,負責通過不同的風格轉化日志信息,他提供給appender對象發布前的信息。(這里的層是指所處的位置)
     layout對象,用於提供格式化日志信息的風格,在發布日志信息前,使其變得可讀,可重用。
     appender對象,這個對象屬於底層的對象,它負責發布信息到不同的目的地,比如數據庫,文件,控制台,UNIXsyslog等等。
log4j的架構組成圖:
     
支撐對象,它們在log4j中扮演了很關鍵的角色:
     1.level對象:級別對象定義日志的粒度和優先級,有七種級別:OFF,DEBUG,INFO,ERROR,WARN,FATAL,ALL。
     2.過濾器對象:用於分析日志信息並決定日志信息是否輸出。每個appender對象可以有幾個過濾器對象協同工作,當日志信息到達特定的appender時,所有的過濾器會幫助appender在其發布到目的地之前進行過濾操作。
     3.對象渲染器:提供一段字符用於識別發送日志的不同對象,這個對象也用於layout對象准備常量信息。
     4.日志管理器:用於管理日志框架,它負責從初始化配置中讀取信息,這個配置可能是文件配置,也可能是類的配置。
 
log4j.properties是log4j的配置文件,它采用鍵值對的方式定義。
默認情況下,logManager對象會在CLASSPATH目錄下尋找log4j.properties.
基本的配置如下:
 
# Define the root logger with appender X
log4j.rootLogger = DEBUG, X
# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender
# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n
首先日志的級別為DEBUG,另外添加了一個appender,名字是X
設置appender的名字是X,並且定義該appender的實現為org.apache.log4j.FileAppender,即文件讀寫方式。
為X設置顯示的方式--layout為PatternLayout
 
log4j提供了多種Appender對象,用輸出日志消息到不同的目的地。比如控制台,文件,系統事件日志等等。每個appender對象都有不同的配置屬性,這些屬性來定義對象的行為。
layout, appender使用layout對象轉換日志信息的格式。
target, 目標可能是控制台,文件,也可能是依賴於其他的appender。
level,用於設定過濾日志的級別。
threshhold  appender可以設置閾值,與日志的級別有關。日志會忽略掉所有低於該級別的日志。
filter  過濾器對象能夠分析日志信息,然后決定日志請求由某個appender處理還是丟掉。
 
添加appender的格式如下:
     properties格式:log4j.logger.[logger-name]=level,appender1,...appendern
     xml格式:
<logger name="com.apress.logging.log4j" additivity="false">
    <appender-ref ref="appender1"/>
    <appender-ref ref="appender2"/>
</logger>
 

上面只展示來FileAppender的用法,log4j還有下面的appender以供使用:

  • AppenderSkeleton
  • AysncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPAppender
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender
 
Layout:
    layout有:
  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout
 
 
第四部分:如何在java中輸出日志消息
直接舉一個例子:
pom.xml:
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
 
properties文件:
# Define log file location
log=E:/

# Define the root logger with appender X
log4j.rootLogger = DEBUG, FILE
# Set the appender named X to be a File appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Define the output file
log4j.appender.FILE.file=${log}/log.out

# Define the layout for X appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
 
DemoTest:
package com.fxb.log;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * @author  方小白  2017-09-04 17:00
 */
public class DemoTest1 {

    private  static Logger logger = Logger.getLogger(DemoTest1.class);

    public static void main(String[] args){

//        PropertyConfigurator.configure("classpath:/log4j.properties");

        logger.error("DemoTest1 -----error");
        logger.info("DemoTest1 -----info");
        logger.debug("DemoTest1 -----debug");
        logger.warn("Demotest1 -----warn");
        logger.trace("DemoTest1 ----trace");
        logger.fatal("DemoTest1 -----fatal");


    }
}
 
第五部分:日志輸出的方法。
看第四部分中的代碼。
日志類提供了很多方法處理日志活動,它不允許我們自己實例化一個logger,但是提供給我們兩種靜態方法,獲得logger對象。
public static Logger getRootLogger();
public static Logger getLogger(String name);
d第一種方法返回應用實例的根Logger,它沒有名字。
第二種方法通過名字獲得日志對象Logger,類的名字是你傳遞的class的名字,通常是一個class的類名或者包名。
例如:static Logger logger = Logger.getLogger(XX.class.getName());
 
Logger類擁有下面幾種打印日志的方法:
public void debug(Object message); 輸出debug級別的錯誤。
public void error(Object message); 輸出error級別的錯誤。
public void fatal(Object message); 輸出fatal級別的錯誤。
public void info(Object message); 輸出info級別的錯誤
public void warn(Object message); 輸出warn級別的錯誤
public void trace(Object message); 輸出trace級別的錯誤。
 
第六部分,日志的級別:
     ALL 所有日志的級別都包括。
     DEBUG  指定的信息事件的粒度是DEBUG,在調試應用的時候會有幫助。
     ERROR  指定錯誤事件,並且這些事件還會保證應用繼續運行。
     FATAL  指定嚴重的錯誤事件,該事件會導致應用暫停。
     INFO  指定信息消息,強調應用粗粒度的運行情況。
     OFF  最高等級,相當於關閉了日志。
     TRACE  指定比DEBUG更粗粒度的調試日志。
     WARN  輸出具有潛在風險的信息。
日志標准的排序是:
     ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF
 
第七部分:日志格式化
     log4j 提供了各種的layout對象,然后根據自己指定的Layout對象,轉化日志信息。通常來說都是應用量身定制的layout對象轉換信息格式。
     所有的layout對象從Appender對象中接收一個LoggingEvent對象,然后通過loggingEvent對象解析信息,在通過合適的ObjectRenderer獲得相應的字符串。
     org.apache.log4j.Layout是log4jAPI中layout的抽象基類。log4j提供了其實現類DateLayout,HTMLLayout,PatternLayout,SimpleLayout,XMLLayout。
     Layout中的方法:
     這個類為所有的一般操作提提供了基本的框架,以及兩個抽象方法。
public abstract boolean ingnoresThrowable(),它聲明是否把java.lang.Throwable.object當做日志輸出的一部分,如果layout處理這個異常對象,那么久不會忽略這個消息,反之就會忽略。
public abstract String format(LoggingEvent event)
個人自定義的layout裝換格式:
除了,抽象方法,layout類也提供了一系列的接口:
public String getContentType(); 返回layout的類型,基類返回的是text/plain默認的文本類型。
public String getFooter(); 獲取日志信息的尾部
public String getHeader();  獲取日志信息的頭部
 
第八部分,文件輸出
在第四部分中,展示了文件輸出,接下來詳細的說一個文件輸出。
使用org.apache.log4j.FileAppender可以把日志寫入文件中。
FileAppender配置:
     immediateFlush 這個標志默認為true,是否每次有消息都自動flush文件中。
     encoding 字符編碼
     threshold  appender的閾值threshold
     fileName 日志的名稱
     fileAppend 默認設置為true,所有的日志都輸出到相同的文件。
     bufferedIO  是否啟動緩沖區,默認為false
     bufferedSize 如果啟用了緩沖區,設置緩沖區的大小,默認是8k
 
多文件輸出--日志輪轉
     在第四部分的properites設置的基礎上。添加:
     maxFileSize  設置日志大小的閾值,默認是10MB
     maxBackupIndex   設置的文件會被備份的數目,默認為1
多文件輸出---日期輪轉
     在第四部分properties設置的基礎上添加:
     DatePattern,聲明命名規則,默認是每天的半夜24點更新一次。
     其他格式:
          '.'yyyy-MM 每個月的開始時候更新一次。
          '.'yyyy-MM-dd 每天半夜24點的時候更新
          '.'yyyy-MM-dd-a 每天半夜24點的時候更新
          '.'yyyy-MM-dd-HH  每個小時更新一次
          '.'yyyy-MM-dd-HH-mm  每分鍾更新一次
          '.'yyyy-ww 每周的第一天更新
 
第九部分:輸出到數據庫中:
     log4j提供了org.apache.log4j.JDBCAppender對象,可以把日志輸出到特定的數據庫中
     
常用的屬性:
     bufferSize 設置buffer的大小,默認是1
     driver  設置數據庫的驅動字符串,比如:com.mysql.jdbc.Driver
     layout  設置使用的layout,默認是org.apache.log4j.PatternLayout
     password 設置數據庫的密碼
     sql  設置每次日志產生的時候執行的sql語句,可以是insert,update,detele
     url   是指數據庫的url
     user 設置數據庫的用戶名
 
示例:

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

log4j.appender.DB.driver=com.mysql.jdbc.Driver

log4j.appender.DB.user=user_name

log4j.appender.DB.password=password

log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

log4j.appender.DB.layout=org.apache.log4j.PatternLayout
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM