Springboot整合log4j2日志 小白版


參考博客:Springboot整合log4j2日志全解 - 上帝愛吃蘋果-Soochow - 博客園 (cnblogs.com)

這個是看到的比較詳細的 然后我個人的配置測試也基本上是按照上面這個來實現的 下面只是加入了個人的一點算多余的注解而已

Spring boot引入依賴 版本號可以自行修改

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
      <version>2.2.4.RELEASE</version>
</dependency>

application.properties 配置:

logging.config=classpath:log4j2-spring.xml

application.yml配置:

logging:
  config: xxxx.xml
  level:
    cn.jay.repository: trace

然后就是配置文件 這個沒啥好說的 上面的博客基本上說的很清楚 我只是在細節上做了點很小白的補充 

log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 設置log4j2的自身log級別為warn -->
<!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status用來指定log4j本身的打印日志的級別 monitorinterval用於指定log4j自動重新配置的監測間隔時間,單位是s,最小是5s-->
<configuration status="info" monitorInterval="30">
    <!--變量配置-->
    <Properties>
        <!-- 格式化輸出:%date表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %msg:日志消息,%n是換行符-->
        <!-- %logger{36} 表示 Logger 名字最長36個字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定義日志存儲的路徑 -->
        <property name="FILE_PATH" value="log" />
     <!--如果是單個項目的話 這層可以去掉 然后將下面生成壓縮包的路徑改下--> <property name="FILE_NAME" value="項目名" /> </Properties> <!--File節點用來定義輸出到指定位置的文件的Appender.--> <!--Console節點用來定義輸出到控制台的Appender.--> <!--RollingFile節點用來定義超過指定大小自動刪除舊的創建新的的Appender.--> <Appenders> <!--這個輸出控制台的配置--> <Console name="Console" target="SYSTEM_OUT"> <!--輸出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <!--控制台只輸出level及其以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Console> <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,適合臨時測試用--> <File name="log" fileName="${FILE_PATH}/test.log" append="false"> <PatternLayout pattern="${LOG_PATTERN}"/> </File> <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔--> <!-- 壓縮規則 會按照設置的路徑生成一個壓縮包或者文件 %i指的是生成的數量 這個數字會從1開始 設置了DefaultRolloverStrategy max后 %i會獲取max的值以及已經生成的%i的最大值 然后進從第%i+1個進行生成 測試了一個小問題 只保留一個最大的%i的值的時候 不會生成前面的壓縮日志 非正常流程 不算bug 覆蓋策列 可以設置日期是當天的 那么在輸出日志達到設置的最大大小后 會生成壓縮文件 壓縮文件最大數量為設置的max 這樣子就是每天最大會容納多大的日志 如果日志文件壓縮包名稱定義的是每個月的 那輸出日志多的時候 就做好被覆蓋的准備 --> <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"> <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久滾動一次,默認是1 hour--> <TimeBasedTriggeringPolicy/> <!--設置日志文件大小 超過后會按照上面設置的地址進行壓縮保存 源日志文件清空后重新寫入--> <SizeBasedTriggeringPolicy size="20 MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件開始覆蓋 計數器 配合filePattern路徑中的%i使用--> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"> <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="1 MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件開始覆蓋--> <DefaultRolloverStrategy max="3"/> </RollingFile> </Appenders> <loggers> <!--Logger節點用來單獨指定日志的形式,比如要為指定包下的class指定不同的日志級別等。--> <!--過濾掉spring和mybatis的一些無用的DEBUG信息--> <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> <!-- <Root level="info"> level="all",執行以下是有的配置;level="info"執行info及以上的配置,哪怕debug配置了也不執行日志 --> <!--Root節點用來指定項目的根日志,如果沒有單獨指定Logger,那么就會默認使用該Root日志輸出--> <!--root里面appender-ref 設置的ref 會作為監聽指標 如果未設置在這個里面 那么就不會輸出日志文件--> <root level="info"> <appender-ref ref="Console"/> <appender-ref ref="log"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>

 

代碼實現:

@RestController
@Slf4j
@RequestMapping("/test")
public class TestController {
  
    @RequestMapping("/demo")
    public String demo(){
        System.out.println("處理請求中……");
       log.error("Something else is wrong here");
        return "ok";
    }
}

 


免責聲明!

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



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