Log4j日志在java項目中的使用(附工程源碼)


一、關於Log4j日志

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

在強調可重用組件開發的今天,除了自己從頭到尾開發一個可重用的日志操作類外,Apache為我們提供了一個強有力的日志操作包-Log4j。

此外,通過Log4j其他語言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語法和用法與在Java程序中一樣,使得多語言分布式系統得到一個統一一致的日志組件模塊。而且,通過使用各種第三方擴展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應用中。

二、Log4j使用前必須要了解的一些概念

2.1、日志信息的優先級

日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。而且在企業中一般也只使用着四種。下面是各個級別的極介紹:

OFF 最高等級,用於關閉所有日志記錄。 
FATAL 指出每個嚴重的錯誤事件將會導致應用程序的退出。 
ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。 
WARN 表明會出現潛在的錯誤情形。 
INFO 一般和在粗粒度級別上,強調應用程序的運行全程。 
DEBUG 一般用於細粒度級別上,對調試應用程序非常有幫助。 
ALL 最低等級,用於打開所有日志記錄。

2.2、日志信息的輸出目的地

日志信息的輸出目的地指定了日志將打印到控制台還是文件中。參考如下配置文件log4j.properties,其既配置了輸出到控制台,也配置了輸出到日志文件中:

### 設置###
log4j.rootLogger = debug,stdout,D,E
 
### 輸出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
 
### 輸出DEBUG 級別以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
### 輸出ERROR 級別以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 

其中log4j.appender.D.Threshold是一個過濾器,配置了表示輸出該級別及其以上的日志, 
另外log4j.appender.D.Append = true一般輸出到文件的都會配置,而且配置成true,true:表示添加,false:表示覆蓋。

2.3、配置日志信息的格式

2.2中的log4j.properties配置文件中,應該會看log4j.appender.*.layout,這表示輸出的日志格式配置。

log4j.appender.*.layout值的選擇有以下幾種:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)

一般我們都采用第二種org.apache.log4j.PatternLayout,自定義格式,如2.2中的log4j.properties配置文件中,這種格式需要我們自定義,這里小寶鴿如下定義:

log4j.appender.*.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

其中含義介紹:

%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日志事件的線程名
%n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

三、Log4j在java中的使用

本項目使用的環境:eclipse + maven 。

3.1、新建maven項目

(Packagding 選war,因為后面會講到其在web項目中的使用,同樣用這個新建的項目),如果不知道如何新建maven項目的,可以參考博主另外一篇文章: 
http://blog.csdn.net/wushiwude/article/details/54312279

3.2、在pom.xml添加Log4j的jar包依賴:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.luo</groupId>
  <artifactId>log4j</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
 
  <properties>
    <!-- log4j日志文件管理包版本 -->
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
  </properties>
  <dependencies>
    <!-- 日志文件管理包 -->
    <!-- log start -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <!-- log end -->
  </dependencies>
</project>

3.3、添加配置文件和測試類

log4j.properties內容如下:

### 設置###
log4j.rootLogger = debug,stdout,D,E
 
### 輸出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
 
### 輸出DEBUG 級別以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
### 輸出ERROR 級別以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

LogTest.java內容如下:

package com.luo.log;
 
import org.apache.log4j.Logger;
 
public class LogTest {
 
    private static Logger logger = Logger.getLogger(LogTest.class);    
 
    public static void main(String[] args) {      
        // 記錄debug級別的信息    
        logger.debug("This is debug message.");    
        // 記錄info級別的信息    
        logger.info("This is info message.");    
        // 記錄error級別的信息    
        logger.error("This is error message.");   
    }    
}

3.4、運行結果

運行LogTest.java,會看到控制台如下結果:

另外,D:\logs下也會多了兩個log文件,且內容如下圖:

轉自:https://blog.csdn.net/wushiwude/article/details/54312319


免責聲明!

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



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