天天看點

在java中使用log4j

簡單使用log4j

要在java項目中使用log4j,需要下載下傳log4j-x.x.x.jar。如果是使用的mvn或gradle建構項目,則添加依賴就可以了,我的pom.xml如下:

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>           

這csdn是不是有bug啊,我貼的代碼明明沒有前面的html屬性,我的内容是從<dependencies>開始的,無語

配置log4j.properties

log=D:/log4j
log4j.rootCategory=INFO, stdout,file
log4j.rootLogger=INFO, stdout,file

### stdout ###
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=%d{HH:mm:ss} %t %p %C.%M(%L) %m%n

log4j.org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager=INFO
log4j.org.apache.http.impl.nio=INFO

# Define the file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=${log}/log.log
log4j.appender.file.File=./log.log

# Define the layout for file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{HH:mm:ss} %t %p %C.%M(%L) %m%n
# File max size
log4j.appender.file.MaxFileSize=100MB
# Keep three backup files.
log4j.appender.file.MaxBackupIndex=3650           

java類如下:

public class Log4jExample {
    public static void main(String[] args){
        Logger log = Logger.getLogger(
                Log4jExample.class.getName());

        log.debug("Hello this is an debug message");
        log.info("Hello this is an info message");
    }
}           

運作後得到的結果如下:

同時在項目目錄下可以看到日志檔案

log4j與slf4j結合

log4j是一個日志系統,slf4j是一個日志系統的封裝,對外提供統一的API。

使用slf4j需要下載下傳slf4j-api-x.x.x.jar 它提供對外一緻的API接口,其本身不提供日志實作。

如果想把slf4j綁定到log4j,則需要下載下傳slf4j對log4j的相應”驅動”——slf4j-log4j12-x.x.x.jar,這樣就可以使用slf4j提供的API,用log4j實作輸出日志了。

所謂驅動,就是實作了slf4j的一些接口,用你喜歡的日志系統打日志。

slf4j還支援好多日志系統,并提供了相應的“驅動”包,例如:

slf4j-jdk14-x.x.x.jar是為java.util.logging提供的驅動

slf4j-simple-x.x.x.jar直接綁定System.err

lf4j-jcl-x.x.x.jar是為commons-logging提供的驅動

logback-classic-x.x.x.jar是為logback提供的驅動

官方的網站:

http://www.slf4j.org/manual.html

為何使用slf4j

我們在開發過程中可能使用各種log,每個Log有不同的風格、布局,如果想靈活的切換那麼slf4j是比較好的選擇。

如何使用slf4j

要使用slf4j,我們需要添加jar包或者添加依賴,如下:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>           

log4j.properties我們使用和上面相同的配置,這裡不再贅述,看下java類

public class Slf4jExample {
    public static void main(String[] args)
            throws IOException,SQLException {
        Logger logger = LoggerFactory.getLogger(Slf4jExample.class);
        logger.info(">>>>>>{}","Hello this is an info message");
    }
}           

不同點就是slf4j有一個占位符屬性,這不僅降低了你代碼中字元串連接配接次數,而且還節省了建立的String對象。通過使用SLF4J,你可以在運作時延遲字元串的建立,這意味着隻有需要的String對象才被建立。

log4j與Lombok結合使用

下面給大家介紹一個更高大上的方式,如果大家使用過Lombok,一定會注意到Lombok本身就封裝了slf4j,這樣我們就不用使用代碼去獲得Logger 對象了,首先需要添加依賴:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>           

使用的時候便十分友善了,隻需簡單的一句話就搞定

@Slf4j
public class LombokExample {
    public static void main(String[] args) {
        log.info(">>>>>>{}", "Hello this is an info message");
    }
}           

效果是一樣的,我就不再展示了

參考:

http://blog.csdn.net/ydpiaoyun/article/details/6717969 http://www.jb51.net/article/41001.htm http://www.yiibai.com/log4j/log4j_sample_program.html http://zhaoyanblog.com/archives/167.html http://blog.csdn.net/foreverling/article/details/51385128