Log4j日志管理的簡單實例
大型項目中很多情況下要分析程序的日志信息,如何管理自己的日志信息至關重要。在應用程序中添加日志記錄總的來說基于三個目的 ,
- 監視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統計分析工作;
- 跟蹤代碼運行時軌跡,作為日后審計的依據;
- 擔當集成開發環境中的調試器的作用,向文件或控制臺打印代碼的調試信息。 </ul>
- log4j-1.2.17.jar
- log4j.properties
- Logger - 日志寫出器 ,供程序員輸出日志信息
- Appender - 日志目的地 ,把格式化好的日志信息輸出到指定的地方去
- Layout - 日志格式化器 ,用來把程序員的 logging request 格式化成字符串
- log4j.properties文件配置編寫
最普通的做法就是在代碼中嵌入許多的打印語句,這些打印語句可以輸出到控制臺或文件中,比較好的做法就是構造一個日志操作類 來封裝此類操作,而不是讓一系列的打印語句充斥了代碼的主體。
這篇文章主要針對基于Java語言實現的項目中的日志管理進行簡單的闡述。
一、工具及文件
二、Log4j 簡介
在強調可重用組件開發的今天,除了自己從頭到尾開發一個可重用的日志操作類外, Apache 為我們提供了一個強有力的日志操作包 -Log4j 。
Log4j 是 Apache 的一個開放源代碼項目,通過使用 Log4j ,我們可以控制日志信息輸送的目的地是控制臺、文件、 GUI 組件、甚至是套接口服 務器、 NT 的事件記錄器、 UNIX Syslog 守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就 是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
此外,通過 Log4j 其他語言接口,您可以在 C 、C++、.Net 、PL/SQL 程序中使用 Log4j ,其語法和用法與在 Java 程序中一樣,使得多語言分布式系統得到一個統一一致的日志組件模塊。而且,通 過使用各種第三方擴展,您可以很方便地將 Log4j 集成到 J2EE 、 JINI 甚至是 SNMP 應用中。
Log4j主要配置三方面的內容,
三、簡單實例
#配置日志寫出器 #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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!