Log4j日志管理的簡單實例

jopen 9年前發布 | 25K 次閱讀 日志處理 log4j

   大型項目中很多情況下要分析程序的日志信息,如何管理自己的日志信息至關重要。在應用程序中添加日志記錄總的來說基于三個目的 ,

  • 監視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統計分析工作;
  • 跟蹤代碼運行時軌跡,作為日后審計的依據;
  • 擔當集成開發環境中的調試器的作用,向文件或控制臺打印代碼的調試信息。
  • </ul>

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


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

    一、工具及文件

    二、Log4j 簡介

           在強調可重用組件開發的今天,除了自己從頭到尾開發一個可重用的日志操作類外, Apache 為我們提供了一個強有力的日志操作包 -Log4j 。
           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 格式化成字符串

    三、簡單實例

    • 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;
        }
    }

    四、參考引用

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!