1. 程式人生 > >log4j日誌輸出到文件的配置

log4j日誌輸出到文件的配置

imp 名稱 1.0 sql apach warn ring source util

1.Maven的dependency

2.log4j.properties的配置

3.Junit的Test類

4.web.xml的配置(非必要)

5.spring的db.config的配置(非必要)

一.maven的dependency

<!--log4j-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version
>2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!--junit--> <dependency> <groupId>junit</
groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>

這些jar包都可以去maven中央倉庫下載到,http://search.maven.org/

二.log4j.properties的配置。

#所有日誌
log4j.rootLogger = DEBUG,stdout,file

log4j.logger.org.apache.ibatis=warn
log4j.logger.java.sql=warn
log4j.logger.org.springframework=warn

# Druid
log4j.logger.druid.sql=DEBUG
log4j.logger.druid.sql.DataSource=warn
log4j.logger.druid.sql.Connection=warn
log4j.logger.druid.sql.Statement=DEBUG
log4j.logger.druid.sql.ResultSet=warn
#設置包名的輸出級別
log4j.logger.cn.wdq=DEBUG,wdq

#控制臺輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n

#所有文件輸出
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = ${webApp.root}/wdq_logs/allDEBUG.log
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.file.append = true

#wdq下所有包的文件輸出
log4j.appender.wdq = org.apache.log4j.FileAppender
log4j.appender.wdq.File = ${webApp.root}/wdq_logs/package_wdq.log
log4j.appender.wdq.Encoding=UTF-8
log4j.appender.wdq.name = fileLogDemo
log4j.appender.wdq.Threshold=DEBUG
log4j.appender.wdq.layout=org.apache.log4j.PatternLayout
log4j.appender.wdq.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.wdq.append = true
log4j.properties是默認加載的文件名,如果要另外起名字,還需要在web.xml裏面進行配置,如果是測試用的,最好用默認的名字,這跟Spring的Application.xml有點像。
log4j.rootLogger = DEBUG,stdout,file中的DEBUG是日誌輸出優先級,從高到低依次為error,warn,info,debug,低級別的可以輸出高級別的日誌,如debug可以輸出任何優先級的
日誌,但是info只能輸出info,warn,error級別的日誌。stdout,file這兩個有點類似於變量名,可以自定義名稱,可以用這兩個東西進行控制臺或者文件的輸出。比如控制臺的為
log4j.appender.stdout=org.apache.log4j.ConsoleAppender;保存為文件的為log4j.appender.file = org.apache.log4j.FileAppender。還有另外三種按天生成的,流形式生成的,
滾動形式的,這裏就不介紹了(反正我也忘了...),具體可以去官方文檔看一下appender的幾種輸出形式。值得一提的是1.文件編碼(Encoding):這個要定義為UTF-8不然輸出到文件裏面有時候部分類
的編碼不一致,有導致部分亂碼。2.文件的名字和存儲路徑(File):如上,我寫的是${webApp.root}/wdq_logs/package_wdq.log,這個其實是在web.xml裏面定義好的。如果沒有定義,那麽
將會輸出到你項目的磁盤根目錄。文件名的格式有常用的.log和.html,推薦用.log,方便項目裏面的所有人查看。3.(追加方式append):設置屬性為true,如果是false的話就會覆蓋掉原先的日誌而不是
追加到後面。
三.Junit的測試類的輸出
package cn.wdq.test;

import org.apache.log4j.Logger;
import org.junit.Test;

public class LoggerTest {
    Logger logger= Logger.getLogger(LoggerTest.class);
    @Test
    public void printLogger(){
        logger.error("直接輸出吧");
        try {

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

控制臺輸出效果技術分享圖片

文件輸出效果

技術分享圖片


四.web.xml的配置(非必要)
<!--log4j-->
    <!--給日誌配置路徑-->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>webApp.root</param-value>
    </context-param>
    <!--<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j2.xml</param-value>
    </context-param>-->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

1.使用默認的名字(log4j.properties),就不用配置log4jConfigLocation(上面註釋掉的部分)。不然就指定路徑(log4j2.xml是我現在用不到的部分),我現在放的是在根目錄,直接classpath:log4j2.xml。
classpath是
指定路徑的格式,此外還有classpath.*:log4j2.xml。他們兩個的區別是classpath是默認加載第一個,加載到就結束。classpath.*還會搜索後面還有沒有匹配項。
2.如果指定絕對路徑就不用配置webAppRootKey,這個是把文件放到webapp下面的。value值可以自定義,但是name值只能是webAppRootKey。配置了之後就要配置listener監聽,不然就忽略。
官方的說的默認加載順序為1.* 2.*(前面這兩個我忘了...與java相關的就後面的兩個)3.log4j.properties和3.log4j.xml。現在網上有很多老舊的文章是1.X的版本的xml配置方法。
我這裏要說的是2.X的。他們兩者的區別如下
1.X
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j=‘http://jakarta.apache.org/log4j/‘>
  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>
  </appender>
  <category name="org.apache.log4j.xml">
    <priority value="info" />
  </category>
  <Root>
    <priority value ="debug" />
    <appender-ref ref="STDOUT" />
  </Root>
</log4j:configuration>

  2.X

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Logger name="org.apache.log4j.xml" level="info"/>
    <Root level="debug">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>

  

五、Spring的db.config的配置(非必要)
我是啟用了mybatis和druid連接池,所以會加一句
filters: stat,log4j

這樣可以監聽到log4j日誌。





log4j日誌輸出到文件的配置