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)結果
相關文章
- mysql之 日誌體系(錯誤日誌、查詢日誌、二進位制日誌、事務日誌、中繼日誌)MySql中繼
- php日誌,記錄日誌PHP
- 日誌分析-apache日誌分析Apache
- 聯機重做日誌、歸檔日誌、備用重做日誌
- mysql 日誌之錯誤日誌MySql
- mysql 日誌之慢查詢日誌MySql
- 【Oracle日誌】- 日誌檔案重建Oracle
- 日誌
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- mysql 日誌之普通查詢日誌MySql
- Apche日誌系列(4):日誌分析(轉)
- mysql 日誌之二進位制日誌MySql
- MYSQL啟用日誌和檢視日誌MySql
- Apche日誌系列(1):訪問日誌(轉)
- Apche日誌系列(2):錯誤日誌(轉)
- Apche日誌系列(3):定製日誌(轉)
- 日誌篇:模組日誌總體介紹
- 日誌配置
- CMS日誌
- mybatis日誌MyBatis
- 日誌管理
- ELK日誌
- 日誌01
- Log日誌
- centos日誌CentOS
- Oracle日誌Oracle
- awr 日誌
- 日誌挖掘
- HPUX 日誌UX
- mysql日誌MySql
- 重做日誌
- ACE日誌
- 日誌寶
- ros 日誌ROS
- 日誌模組
- 日誌列印
- Oracle 11g RAC檢視ASM日誌、grid日誌和DB日誌OracleASM
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架