日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring boot配置logback日志

發布時間:2025/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot配置logback日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring boot配置logback日志


在上一篇spring boot入門里提過,Spring Boot默認的日志打印是logback,所以配置logback日志會很簡單,但是也有注意的地方。

本次配置日志的需求

  • 日志需要控制臺打印和文件打印兩種。
  • 其中文件打印按照日志級別分別保存到各自的文件里。
  • 文件日志每天一個日志,并且保存30天。
  • 文件日志可以自由指定保存路徑、打印格式等。
  • 控制臺打印可指定打印格式,并且自由增加刪除某些日志。
  • 通過上一篇的介紹,知道,Spring boot默認日志為logback,所以只要引入如下依賴,就會自動引入logback日志的jar包。

    <!-- Spring Boot Web 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

    單獨spring 項目使用 logback日志需要的jar包如下:

    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.9</version> </dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.9</version> </dependency> <!--因logback日志需要與slf4j配合使用,如下的jar包需要引入--> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version> </dependency>1234567891011121314151617

    再說一遍,spring boot項目不需要引入上邊的三個jar包,已經自動引入了。

    以下是配置步驟:

    • logback日志的在spring boot里的配置需要在src/main/resources下,application.properties同級,放一個logback的xml文件,一般起名字為logback-spring.xml,網上很多人建議起名字為這個,我沒看出有什么區別,所以我就按照他們講的配置了,以免出現不必要的錯誤。
    • logback-spring.xml按照我的需求配置成控制臺打印和文件打印,直接將以下內容復制,并命名成該名字,放到上邊說的位置中,具體的內容如下:
    <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds"> <!-- 都說spring boot使用日志需要引入這個,但是我引入了之后總是打印兩份日志,所以我去除了,并不影響使用 --><!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> --><!-- 控制臺設置 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- INFO --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路徑 ,注意LOG_PATH是默認值,它的配置對應application.properties里的logging.path值--> <file>${LOG_PATH}/info/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名稱 --> <fileNamePattern>info/info-%d{yyyy-MM-dd}.log </fileNamePattern> <!-- 文件最大保存歷史數量 --> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender><!-- DEBUG --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路徑 ,注意LOG_PATH是默認值,它的配置對應application.properties里的logging.path值--> <file>${LOG_PATH}/debug/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名稱 --> <fileNamePattern>debug/debug-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 文件最大保存歷史數量 --> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- WARN --> <appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路徑 ,注意LOG_PATH是默認值,它的配置對應application.properties里的logging.path值--> <file>${LOG_PATH}/warn/warn.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名稱 --> <fileNamePattern>warn/warn-%d{yyyy-MM-dd}.log </fileNamePattern> <!-- 文件最大保存歷史數量 --> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ERROR --> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路徑 ,注意LOG_PATH是默認值,它的配置對應application.properties里的logging.path值--> <file>${LOG_PATH}/error/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名稱 --> <fileNamePattern>error/error-%d{yyyy-MM-dd}.log </fileNamePattern> <!-- 文件最大保存歷史數量 --> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender><logger name="org.springframework" additivity="false"><level value="ERROR" /><appender-ref ref="STDOUT" /><appender-ref ref="errorAppender" /></logger><!-- 由于啟動的時候,以下兩個包下打印debug級別日志很多 ,所以調到ERROR--><logger name="org.apache.tomcat.util" additivity="false"><level value="ERROR"/><appender-ref ref="STDOUT"/><appender-ref ref="errorAppender"/></logger><!-- 默認spring boot導入hibernate很多的依賴包,啟動的時候,會有hibernate相關的內容,直接去除 --><logger name="org.hibernate.validator" additivity="false"><level value="ERROR"/><appender-ref ref="STDOUT"/><appender-ref ref="errorAppender"/></logger><root level="DEBUG"><appender-ref ref="STDOUT"/> <appender-ref ref="infoAppender"/><appender-ref ref="debugAppender"/><appender-ref ref="warnAppender"/><appender-ref ref="errorAppender"/></root> </configuration>

    其中,你們應該注意到里邊有很多的“${}”形式的變量這其實是logback日志的默認名稱,比如${LOG_PATH},${CONSOLE_LOG_PATTERN},${FILE_LOG_PATTERN} 等,這些變量只需要在spring boot的默認配置文件,application.properties里添加如下配置即可:

    1)以下是日志輸出的位置,注意在logback-spring.xml里用LOG_PATH才能獲取到值

    logging.path=d:/logs/springBoot

    2)以下是指向日志配置文件的位置

    logging.config=classpath:logback-spring.xml

    3)以下是控制臺打印日志格式設置,注意在logback-spring.xml里用CONSOLE_LOG_PATTERN才能獲取

    logging.pattern.console=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n

    4)以下是文件打印日志格式設置,注意在logback-spring.xml里用FILE_LOG_PATTERN才能獲取到

    logging.pattern.file=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n

    添加上邊四個配置就對日志配置完了。多說一句,為什么在application.properties文件里的日志配置名字和${} 里不同呢,這就需要看logback-spring.xml里最上邊的base.xml引入,找到這個文件就明白了。它的位置在以下jar包里:

    spring-boot-1.5.1.RELEASE.jar

    找到如下位置:

    org.springframework.boot.logging.logback

    就會看到里邊有base.xml、console-appender.xml等等四個xml文件,打開file.appender.xml如下:

    也就是說spring boot里的日志配置文件已經將其寫死,但是在application.properties里又要按照其要求寫,所以我感覺這也是spring boot的缺點,太多隱藏的配置了,如果知道,那很簡單了,但是不知道,就會浪費很多的時間,多配置很多的無用東西。

    通過這四個spring boot的日志xml文件,也應該知道為什么在上一篇入門spring boot里沒有配置日志,卻打印日志的原因,其內在自己的日志應該就是這個。

    另外說一下日志的打印控制,比如有一些打印日志我不想要,就可以通過配置logback-spring.xml文件,添加一個logger標簽即可。比如如下:

    [2021-06-05 19:14:23] -- [INFO ]: [org.I0Itec.zkclient.ZkClient] -- zookeeper state changed (SyncConnected) [2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- Leaving process event [2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- State is SyncConnected123

    以上三條日志我現在不需要讓它打印了,那就需要額外配置了,因為它們來自于org.I0Itec.zkclient.ZkClient 類,并且打印的內容分別是DEBUG和INFO級別,日志打印只要將該類的日志打印級別調高(日志從低到高為 TRACE、DEBUG、INFO、WARN、ERROR),因此只要將該類的日志級別配置為WARN以上,就不會打印上邊的內容了。配置方法如下:

    <logger name="org.I0Itec.zkclient.ZkClient" additivity="false"><level value="ERROR" /><appender-ref ref="STDOUT" /><appender-ref ref="errorAppender" /> </logger>

    其中:

    name表示日志的打印位置,從上邊可以看出是來自該類
    additivity設置為false表示該日志打印設置(控制臺打印還是文件打印等具體設置)不會向根root標簽傳遞,也就是說該logger里怎么設置的那就會怎么打印,跟root無關
    level value=’error’表示將該類日志級別設置為error級才會打印。
    最后兩行表示error級時會打印控制臺和error文件同時打印日志。

    配置logback日志的注意點:

  • logback和log4j最好不要放在一起,會沖突,最主要的jar包是slf4j-log4j12.jar 和 logback-classic.jar 這兩個jar包的設計簡直是反人類,有一個類,這兩個都會有,只要這兩個jar包同時引入,就會看到啟動spring boot會有一串沖突的紅字,因此,只要用logback日志,就需要特別注意除了排除log4j主要jar包,別忘了排除slf4j-log4j12.jar ,具體的排除方法,可以選擇maven項目的pom.xml,在右邊找到Dependency Hierarchy,然后找到要排除的jar包,右擊選擇Exclude Maven Artifact,然后保存即可。

  • logback的logback-spring.xml文件如果你沒有按照我這么寫,在application.properties文件里就不需要配置全部的4行內容,如果直接復制的我的,那就需要配置上了。

  • logback貌似沒有log4j常用,很多的第三方jar包都使用的log4j,比如aliba的dubbo和zookeeper都是默認的log4j,所以你在引入第三方的jar時,又使用的是logback,就特別注意是不是它們默認使用的log4j,如果是的話,有slf4j-log4j12.jar 就排除即可。后邊說spring boot+dubbo時會再說。

  • 總結

    以上是生活随笔為你收集整理的spring boot配置logback日志的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。