Spring+Log4J.xml在web中的使用方法

1.通過Maven導入Jar包依賴

  • Spring依賴的包:spring-core,spring-beans, spring-context, spring-web
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
  • Log4J依賴包:
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2. web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name>Archetype Created Web Application</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:config/spring/core/appcontext-*.xml</param-value>
  </context-param>

  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <!-- 注意與上方spring配置文件差異,此處classpath後不可帶* -->
    <param-value>classpath:log/log4j.xml</param-value>
  </context-param>

  <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
  </context-param>

  <!-- 配置log4j.xml監聽器-->
  <!--需要配置在 ContextLoaderListener之前-->
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

3. Log4J.xml 配置

log4j.xml 的詳細配置可參考文章

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

<log4j:configuration>

    <!-- 日誌輸出到控制檯-->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <!-- 日誌輸出格式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n" />
        </layout>

        <!--過濾器設置輸出的級別-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 設置日誌輸出的最小級別 -->
            <param name="levelMin" value="INFO" />
            <!-- 設置日誌輸出的最大級別 -->
            <param name="levelMax" value="ERROR" />
        </filter>
    </appender>


    <!--日誌輸出到文件,且每天一個文件-->
    <appender name="rootAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <!-- 文件位置 -->
        <param name="File" value="/data/applogs/own/root.log" />
        <!-- 是否在原有日誌的基礎添加新日誌-->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%p][%d{HH:mm:ss SSS}][%c]-[%m]%n" />
        </layout>
    </appender>


    <!-- 根logger的設置-->
    <root>
        <priority value ="debug"/>
        <appender-ref ref="console"/>
        <appender-ref ref="rootAppender"/>
    </root>

</log4j:configuration>

4. 代碼測試

@Component
public class LogTest {
    Logger logger = Logger.getLogger(LogTest.class);

    @PostConstruct
    public void test(){
        logger.info("----Log.Info----");
        logger.info("----Log.Info----");
        logger.info("----Log.Info----");
    }
}

5. 結果展示:

  • 控制檯輸出:
    這裏寫圖片描述

  • 文件輸出
    這裏寫圖片描述

6. Spring + Log4j + Slf4j

Slf4j爲所有日誌組件提供統一的門面,在使用時,如果需要換日誌組件(如從logback換成log4j),只需要替換相應的jar即可, 理論上是不需要修改代碼。
此處以Log4j + Slf4j 爲例:

需要jar包:

<!--引入spring依賴jar-->

<!--slf4j的依賴包-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.9</version>
</dependency>

<!--連接slf4j與log4j-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.9</version>
</dependency>

<!--log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

測試代碼

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class LogTest {
    // 通過slf4j提供的工廠方法,構建logger
    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    @PostConstruct
    public void test(){
        logger.info("----Log.Info----");
        logger.info("----Log.Info----");
        logger.info("----Log.Info----");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章