55.SpringBoot日誌
目錄
一、SpringBoot日誌框架技術選型
SpringBoot的底層是Spring框架,Spring框架預設使用JCL。但是SpringBoot對Spring做了封裝,最終SpringBoot使用的是SLF4j(日誌抽象層)和logback(日誌實現類)來完成日誌框架。
二、SLF4j
我SpringBoot要用slf4j+logback來做日誌框架,但是我內部的一些元件他們用的是其他元件,比如Spring:commons+logging。Hibernate:jboss+logging等等。這邊就有一個需求:
統一記錄日誌:即使用的不是slf4j,但是我還是想要別的元件都以slf4j輸出日誌?
- 將系統中其他日誌框架先排除出去
- 用中間包來替換原有的日誌框架
- 匯入slf4j來實現日誌
注:引入其它框架的時候,一定要把這個框架依賴的日誌框架移除掉。
三、日誌使用
1.預設配置
SpringBoot預設配置好了日誌:
#指定目錄下指定日誌級別
logging.level.com.xupeng=warn
#專案根目錄下生成對應的日誌
#logging.file.name=xupeng.log
#指定目錄下生成spring.log的日誌。如果logging.file.name存在,則logging.file.path不生效
logging.file.path=D:/aa/xupeng
#在控制檯輸出的日誌的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%msg%n
#在指定檔案中日誌輸出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
輸出格式裡面內容的含義:
%d:日期時間
%thread:執行緒名
%-5level:級別,從左顯示5個字元寬度
%logger{50}:logger名字最長50個字元,否則按照句點分隔
%msg:日誌訊息
%n:換行
2.原始碼路徑:
四、日誌指定配置
給類路徑下放上每個日誌框架自己的配置檔案,springboot就不使用預設的配置了。
我們一般在正式開發,也會使用這種方法。
1.原生的logback.xml
在resources下面新建logback.xml。裡面的內容大家可以複製logback的程式碼,可以直接用。唯一需要修改的是兩個路徑。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滾動策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑-->
<fileNamePattern>${user.dir}/logs/xupeng-info.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滾動策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑-->
<fileNamePattern>${user.dir}/logs/xupeng-error.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
<logger name="org.mybatis.spring" level="INFO" additivity="false" />
<logger name="druid.sql.ResultSet" level="INFO" additivity="false" />
<logger name="org.apache" level="INFO" additivity="false" />
<logger name="com.netflix.discovery" level="INFO" additivity="false" />
<logger name="org.redisson" level="INFO" additivity="false" />
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
2.有profile的logback
我們可能在不同環境會配置不同日誌檔案。比如開發環境和生產環境需要不同的日誌。
(1)這裡有幾個注意點,首先就是檔名。檔名logback後面需要字尾,不然會報錯。比如我這裡名字是logback-xupeng.xml
(2)設定環境,比如在application.properties裡面設定:
spring.profiles.active=prod
(3)新增如下程式碼
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
完整程式碼:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滾動策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑-->
<fileNamePattern>${user.dir}/logs/xupeng-info.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
</layout>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滾動策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑-->
<fileNamePattern>${user.dir}/logs/xupeng-error.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
<logger name="org.mybatis.spring" level="INFO" additivity="false" />
<logger name="druid.sql.ResultSet" level="INFO" additivity="false" />
<logger name="org.apache" level="INFO" additivity="false" />
<logger name="com.netflix.discovery" level="INFO" additivity="false" />
<logger name="org.redisson" level="INFO" additivity="false" />
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
(4)結果
相關文章
- 日誌分析-apache日誌分析Apache
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- 日誌
- 【Spring】日誌列印sql,日誌配置列印sqlSpringSQL
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架
- CMS日誌
- 日誌配置
- mybatis日誌MyBatis
- Weblogic日誌Web
- ros 日誌ROS
- Log日誌
- 日誌列印
- Loggiing日誌
- Mysql日誌MySql
- 日誌01
- 日誌管理
- ELK日誌
- [技術分享]日誌切割(按天切割日誌)
- 日誌篇:模組日誌總體介紹
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- 日誌11月4日
- 日誌11月18日
- 日誌11月24日
- 日誌12月16日
- 【REDO】Oracle 日誌挖掘,分析歸檔日誌線上日誌主要步驟Oracle
- Go中使用Zap日誌庫與Lumberjack日誌切割Go
- Kubernetes 叢集日誌 和 EFK 架構日誌方案架構
- lumen cli日誌和普通日誌分開儲存
- 日誌服務之使用Nginx模式採集日誌Nginx模式
- 【Oracle】歸檔日誌管理-設定歸檔日誌路徑以及歸檔日誌冗餘Oracle
- python日誌配置Python
- crash日誌分析
- Crash日誌解析
- 重做日誌管理
- 實訓日誌
- Python 日誌(Log)Python
- 日誌服務
- 專案日誌