溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Boot 2中如何使用log4j2日志框架

發(fā)布時間:2021-07-30 13:49:13 來源:億速云 閱讀:393 作者:Leah 欄目:大數(shù)據(jù)

本篇文章為大家展示了Spring Boot 2中如何使用log4j2日志框架,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

排除Logback依賴

Spring Boot 2.x默認(rèn)使用Logback日志框架,要使用 Log4j2必須先排除 Logback。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
         <!--排除logback-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

引入Log4j2依賴

<!--log4j2 依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

上面的 log4j2 已經(jīng)適配了slf4j日志門面,所以我們的代碼無需替換,只需要替換具體的日志框架以及對應(yīng)的配置文件。

配置Log4j2

創(chuàng)建log4j2.xml文件,放在工程resources目錄里。這樣就可以不加任何配置。如果你需要指定配置文件需要在Spring boot 配置文件application.yml中指定 logging.config 屬性。下面是一份比較詳細(xì)的 log4j2 配置文件

 <?xml version="1.0" encoding="UTF-8"?>
  <!--日志級別以及優(yōu)先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
  <!--Configuration后面的status,這個用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時,你會看到log4j2內(nèi)部各種詳細(xì)輸出-->
  <!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
  <configuration status="WARN" monitorInterval="30">
      <!--先定義所有的appender-->
      <appenders>
      <!--這個輸出控制臺的配置-->
          <console name="Console" target="SYSTEM_OUT">
          <!--輸出日志的格式-->
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
          </console>
      <!--文件會打印出所有信息,這個log每次運(yùn)行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
      <File name="log" fileName="log/test.log" append="false">
         <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
      </File>
      <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
          <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
              <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->        
              <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          </RollingFile>
          <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
              <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個文件,這里設(shè)置了20 -->
              <DefaultRolloverStrategy max="20"/>
          </RollingFile>
          <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
              <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          </RollingFile>
      </appenders>
      <!--然后定義logger,只有定義了logger并引入的appender,appender才會生效-->
      <loggers>
          <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
          <logger name="org.springframework" level="INFO"/> 
          <logger name="org.mybatis" level="INFO"/>
          <root level="all">
              <appender-ref ref="Console"/>
              <appender-ref ref="RollingFileInfo"/>
              <appender-ref ref="RollingFileWarn"/>
              <appender-ref ref="RollingFileError"/>
          </root>
      </loggers>
  </configuration>

基本上你拿上面的配置根據(jù)你自己的需要更改一下即可生效。 windows 下 ${sys:user.home} 會將日志打印到用戶目錄下

調(diào)用Logger輸出日志

下面的示例代碼使用了神器lombok中的@Slf4j 注解可以很方便的使用 org.slf4j.Logger 對象。日常開發(fā)盡量使用Slf4j門面來處理日志,盡量避免使用具體的日志框架。

package cn.felord.spring.security;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.Properties;

/**
 * @author dax
 * @since 2019/10/9 0:03
 */
@Slf4j
@RestController
@RequestMapping("/logging")
public class LogController {


    @GetMapping("/do")
    public String log() {

        log.info("log4j2 test date: {}  info: {}", LocalDate.now(), "請關(guān)注公眾號:Felordcn");
 
        return "log4j2";
    }
    
}

控制臺輸出 :[00:14:48:161] [INFO] - cn.felord.spring.security.LogController.log(LogController.java:23) - log4j2 test date: 2019-10-09 info: 請關(guān)注公眾號:Felordcn 并存檔。

上述內(nèi)容就是Spring Boot 2中如何使用log4j2日志框架,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI