Log4j日誌管理的簡單實例

       大型項目中很是多狀況下要分析程序的日誌信息,怎樣管理本身的日誌信息相當重要。html

在應用程序中加入日誌記錄總的來講基於三個目的 ,java

  • 監視代碼中變量的變化狀況,週期性的記錄到文件裏供其它應用進行統計分析工做;
  • 跟蹤代碼執行時軌跡,做爲往後審計的根據。
  • 擔當集成開發環境中的調試器的做用。向文件或控制檯打印代碼的調試信息。  

       最普通的作法就是在代碼中嵌入不少的打印語句,這些打印語句可以輸出到控制檯或文件裏,比較好的作法就是構造一個日誌操做類 來封裝此類操做。而不是讓一系列的打印語句充斥了代碼的主體。apache


       這篇文章主要針對基於Java語言實現的項目中的日誌管理進行簡單的闡述。markdown

1、工具及文件

2、Log4j 簡單介紹

       在強調可重用組件開發的今天。除了本身從頭至尾開發一個可重用的日誌操做類外, Apache 爲咱們提供了一個強有力的日誌操做包 -Log4j 。app


       Log4j 是 Apache 的一個開放源碼項目,經過使用 Log4j 。咱們可以控制日誌信息輸送的目的地是控制檯、文件、 GUI 組件、甚至是套接口服 務器、 NT 的事件記錄器、 UNIX Syslog 守護進程等;咱們也可以控制每一條日誌的輸出格式;經過定義每一條日誌信息的級別,咱們可以更加仔細地控制日誌的生成過程。最使人感興趣的就 是,這些可以經過一個配置文件來靈活地進行配置,而不需要改動應用的代碼。分佈式

  
       此外,經過 Log4j 其它語言接口,您可以在 C 、C++、.Net 、PL/SQL 程序中使用 Log4j ,其語法和使用方法與在 Java 程序中同樣,使得多語言分佈式系統獲得一個統一一致的日誌組件模塊。函數

而且。通 過使用各類第三方擴展,您可以很是方便地將 Log4j 集成到 J2EE 、 JINI 甚至是 SNMP 應用中。工具


       Log4j主要配置三方面的內容,佈局

  • Logger - 日誌寫出器 。供程序猿輸出日誌信息
  • Appender - 日誌目的地 。把格式化好的日誌信息輸出到指定的地方去
  • Layout - 日誌格式化器 ,用來把程序猿的 logging request 格式化成字符串

3、簡單實例

  • log4j.properties文件配置編寫
#配置日誌寫出器
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
#當中。 level 是日誌記錄的優先級,分爲 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。
#Log4j 建議僅僅使用四個級別,優先級從高到低各自是ERROR、WARN、INFO、DEBUG 。
#經過在這裏定義的級別,您可以控制到應用程序中對應級別的日誌信息的開關。比方在這裏定義了info級別。則應用程序中所有DEBUG級別的日誌信息將不被打印出來。
#appenderName 就是指日誌信息輸出到哪一個地方。可以同一時候指定多個輸出目的地。
log4j.rootLogger=info,R,stdout 

#配置日誌目的地,輸出到控制檯
log4j.appender.stdout=org.apache.log4j.ConsoleAppender

#追加的方式輸出
log4j.appender.stdout.follow=true

#配置日誌格式化器
#可以靈活地指定佈局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

#指定佈局模式的格式
log4j.appender.stdout.layout.ConversionPattern=%d[%t](%F%L)-%m%n

#文件大小到達指定尺寸的時候產生一個新的文件
log4j.appender.R=org.apache.log4j.RollingFileAppender

#輸出日誌文件的位置路徑TestServer.log
log4j.appender.R.File=TestServer.log

#單個文件最大尺寸,在日誌文件到達該大小時,將會本身主動滾動。即將原來的內容移到 TestServer.log.1 文件。
log4j.appender.R.MaxFileSize=20MB

#指定可以產生的滾動文件的最大數
log4j.appender.R.MaxBackupIndex=20

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d%5p[%t](%F%L)-%m%n
  • 簡單的Java程序實例代碼
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class logTest {

    static public Logger m_logger;

    static private void InitLog() {
        try {
            m_logger = Logger.getLogger(logTest.class.getName());
            PropertyConfigurator.configure("log4j.properties");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {

        logTest.InitLog();

        m_logger.info("main is start [...]");

        try {
            m_logger.info("本身定義的異常類對象");
            throw new MyException("本身定義的異常");// 拋一個本身定義的異常類對象,傳入的參數就是給控制檯看的異常
        } catch (MyException e) {
            m_logger.error(e.getExceptionName().toString(), e);
            m_logger.debug(e);
        }
        m_logger.info("main is over [ OK ]");

    }

}

class MyException extends Exception // 本身定義的異常類 繼承Exception類
{
    private static final long serialVersionUID = 1L;
    private String exceptionName; // 定義一個私有變量,用來爲本身定義異常

    public MyException() {
    } // 建立一個無參數的構造函數

    public MyException(String exceptionName) { // 建立一個有參數的構造函數,傳入的參數爲前面定義的異常名稱
        this.exceptionName = exceptionName;
    }

    public String getExceptionName() { // 定義一個方法,提供給外部來獲取私有變量
        return this.exceptionName;
    }
}
  • 測試結果post

    – 控制檯輸出例如如下。
    這裏寫圖片描寫敘述
    – project文件夾路徑輸出例如如下。
    這裏寫圖片描寫敘述
    這裏寫圖片描寫敘述

4、參考引用

相關文章
相關標籤/搜索