前面看了網(wǎng)上的一些記錄片段記錄都不太完整也不友好,板磚過來簡單修改注釋和移除一些不必要的東西(如:彩色字體喊式,有毛用A敛堋)
springboot2.x 已經(jīng)給我們包含了logging包內(nèi)繼承了需要的log包,都是最合適的版本宅此,不需要自己maven導(dǎo)入秦踪。
開始:
resources目錄創(chuàng)建
logback-spring.xml
必須是這個 不然spring 不認(rèn).
你也可以自定義,修改入口配置logging.config=你的xml
logback-spring.xml
內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 項(xiàng)目名稱 -->
<property name="PROJECT_NAME" value="springBootDemoFull"/>
<!--定義日志文件的存儲地址后面攔截器用到褐捻,禁止使用相對路徑-->
<property name="LOG_HOME" value="/logs"/>
<!-- 控制臺輸出 -->
<!--appender的name屬性隨意命名-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系統(tǒng)信息日志文件 appender -->
<appender name="SYSTEM_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--過濾器,攔截INFO級別日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<!--記錄信息后退出椅邓,防止其他appender的filter繼續(xù)攔截日志記錄-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.info.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系統(tǒng)錯誤日志文件 appender-->
<appender name="SYSTEM_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--過濾器秧了,攔截ERROR級別日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!--記錄信息后退出耙箍,防止其他appender的filter繼續(xù)攔截日志記錄-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件輸出的文件名乖订,如果按小時分割加入HH就行-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.error.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 自定義日志 -->
<appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器斥难,只打印INFO級別的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.other.%d{yyyyMMdd}.%i.log</FileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>15</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--自定義日志加入一個別名other 引用的 appender 為 OTHER我們上面的appender的name屬性的value值 也就是說 在項(xiàng)目中 直接 getLogger("other") 即可-->
<logger name="other" additivity="true">
<appender-ref ref="OTHER"/>
</logger>
<!-- 來發(fā)環(huán)境下的appender注冊 -->
<!--springProfile屬性為 application.properties中spring.profiles.active屬性的值 : dev 或 prod -->
<springProfile name="dev">
<!--將appender'加入的springboot中 必須使用root節(jié)點(diǎn)注冊 appender 如果appender沒有指定日志級別將使用root的默認(rèn)level屬性級別-->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="SYSTEM_INFO"/>
<appender-ref ref="SYSTEM_ERROR"/>
</root>
</springProfile>
<!-- 生產(chǎn)環(huán)境下的appender注冊 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="SYSTEM_INFO"/>
<appender-ref ref="SYSTEM_ERROR"/>
</root>
</springProfile>
</configuration>
入口配置文件
application.properties
配置
這里提醒一下引入其他配置文件必須使用spring.profiles.include
統(tǒng)一規(guī)范,為什么請看配置注釋:
spring.application.name=springboot-demo-full
# 多個配置文件中有同一個值合住,以下情況獲取值的效果:
# 1.啟動命令不帶--spring.profiles.active參數(shù)以application.properties首先啟動
# 按順序所有文件第一個配置的spring.profiles.active屬性中指定的最后一個文件中含有該屬性的值為準(zhǔn)
# 如果所有文件都沒有spring.profiles.active绰精,
# 那么以pring.profiles.include配置的最后一個屬性文件中的值為準(zhǔn)
# 2.啟動命令帶--spring.profiles.active參數(shù)以參數(shù)指定的屬性文件首先啟動
# 此情況,以命令指定的配置文件中的值為準(zhǔn)透葛,其他文件中再配置spring.profiles.active也不會生效笨使,如果不存在值,那么會以pring.profiles.include指定的最后一個文件中的值為準(zhǔn)
##簡要說
# 啟動命令 java -jar name.jar --spring.profiles.active指定文件中的值優(yōu)先級高于
# 文件中spring.profiles.active指定的文件列表中最后一次出現(xiàn)的值 > 文件中spring.profiles.include指定的文件列表中最后一次出現(xiàn)的值
# 總結(jié)說明:建議所有引入配置的時候避免用相同的配置屬性 或 都使用 spring.profiles.include 覆蓋前面的值僚害,如果出現(xiàn)問題硫椰,查找問題也有規(guī)律可循。
spring.profiles.include=druid,mybatis
# 生產(chǎn)環(huán)境修改為prod
spring.profiles.active=dev
代碼中使用的時候切記別導(dǎo)錯了包,包為:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
1.走INFO 和ERROR的攔截器
Logger logger = LoggerFactory.getLogger(xxxx.class);
logger.info(msg);
logger.error(msg);
2.走自定義攔截器的
Logger logger = LoggerFactory.getLogger("other");
logger.info(msg);