前言
一直沒機(jī)會(huì)做spring生態(tài)圈的框架,公司選擇的是一些小眾的微服務(wù),鑒于此考慮,豐富自己的技術(shù)棧,花了兩天時(shí)間從網(wǎng)上各網(wǎng)站上學(xué)習(xí)了springboot一些基礎(chǔ)知識(shí)。
本章只介紹springboot微服務(wù)的默認(rèn)日志配置,logback組件。
環(huán)境準(zhǔn)備
- IntelliJ IDEA
- 前一章中搭建的微服務(wù)框架
開始集成
-
pom.xml中增加依賴包
增加依賴包.png
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<!--用于簡(jiǎn)化java代碼開發(fā)-->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
-
application.yml中增加logging的配置
logging配置.png
# Logging settings.
logging:
config: classpath:logback-spring.xml
-
右鍵resources目錄,新增文件logback-spring.xml
logback配置文件
內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志級(jí)別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設(shè)置為WARN,則低于WARN的信息都不會(huì)輸出 -->
<!-- scan:當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true -->
<!-- scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。 -->
<!-- debug:當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。 -->
<configuration>
<contextName>logback</contextName>
<!--讀取配置中心的屬性-->
<!-- <springProperty scope="context" name="logpath" source="logging.path"/>-->
<!-- name的值是變量的名稱,value的值時(shí)變量定義的值。通過定義的值會(huì)被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。 -->
<property name="LOG_PATH" value="C:\\xuefly\\log\\" />
<!--輸出到控制臺(tái)-->
<!-- %m輸出的信息,%p日志級(jí)別,%t線程名,%d日期,%c類的全名,%-5level:級(jí)別從左顯示5個(gè)字符寬度,%msg:日志消息,%i索引【從數(shù)字0開始遞增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<!--%logger{50}:表示logger名字最長(zhǎng)50個(gè)字符,否則按照句點(diǎn)分割-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</Pattern>
<!-- 設(shè)置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--輸出到文件-->
<!-- 時(shí)間滾動(dòng)輸出 level為全部日志 -->
<appender name="RUNTIME" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日志文件的路徑及文件名,注釋掉這個(gè)按照每天生成一個(gè)日志文件 -->
<!--<file>${LOG_PATH}/public.log</file>-->
<!--日志文件輸出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 設(shè)置字符集 -->
</encoder>
<!-- 日志記錄器的滾動(dòng)策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔 后面可以加.zip-->
<fileNamePattern>${LOG_PATH}public-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文件保留天數(shù)-->
<maxHistory>100</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件達(dá)到 最大時(shí)會(huì)被壓縮和切割 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志總保存量為200MB-->
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
</appender>
<!--時(shí)間滾動(dòng)輸出 level為 ERROR 日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此處設(shè)置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>100</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件達(dá)到 最大時(shí)會(huì)被壓縮和切割 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志總保存量為200MB-->
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<!-- 此日志文件只記錄ERROR級(jí)別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--開發(fā)環(huán)境:打印控制臺(tái)-->
<springProfile name="dev">
<!--<logger name="com.phfund" level="debug"/>-->
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="RUNTIME" />
<appender-ref ref="ERROR" />
</root>
</springProfile>
<!--生產(chǎn)環(huán)境:輸出到文件-->
<springProfile name="prd">
<root level="INFO">
<appender-ref ref="RUNTIME" />
<appender-ref ref="ERROR" />
</root>
</springProfile>
</configuration>
為了區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境中日志記錄方式以及日志記錄的級(jí)別不同,在該配置文件中通過<springProfile>區(qū)分,本文中,定義了dev和prd兩種模式,此值在application.yml中定義

- yml中增加配置
spring:
#日志記錄模式
profiles:
active: dev #用來控制當(dāng)前使用什么模式
#服務(wù)啟動(dòng)時(shí)打印的橫幅
banner:
charset: "UTF-8"
location: classpath:banner.txt
4'. 番外話
此處banner是服務(wù)啟動(dòng)時(shí)展示的橫幅,一般是工程名或服務(wù)名通過banner生成器生成的,網(wǎng)址為:http://patorjk.com/software/taag/
_____ _____ _____ _______
/\ \ /\ \ /\ \ /::\ \
/::\ \ /::\ \ /::\____\ /::::\ \
/::::\ \ /::::\ \ /::::| | /::::::\ \
/::::::\ \ /::::::\ \ /:::::| | /::::::::\ \
/:::/\:::\ \ /:::/\:::\ \ /::::::| | /:::/~~\:::\ \
/:::/ \:::\ \ /:::/__\:::\ \ /:::/|::| | /:::/ \:::\ \
/:::/ \:::\ \ /::::\ \:::\ \ /:::/ |::| | /:::/ / \:::\ \
/:::/ / \:::\ \ /::::::\ \:::\ \ /:::/ |::|___|______ /:::/____/ \:::\____\
/:::/ / \:::\ ___\ /:::/\:::\ \:::\ \ /:::/ |::::::::\ \ |:::| | |:::| |
/:::/____/ \:::| |/:::/__\:::\ \:::\____\/:::/ |:::::::::\____\|:::|____| |:::| |
\:::\ \ /:::|____|\:::\ \:::\ \::/ /\::/ / ~~~~~/:::/ / \:::\ \ /:::/ /
\:::\ \ /:::/ / \:::\ \:::\ \/____/ \/____/ /:::/ / \:::\ \ /:::/ /
\:::\ \ /:::/ / \:::\ \:::\ \ /:::/ / \:::\ /:::/ /
\:::\ /:::/ / \:::\ \:::\____\ /:::/ / \:::\__/:::/ /
\:::\ /:::/ / \:::\ \::/ / /:::/ / \::::::::/ /
\:::\/:::/ / \:::\ \/____/ /:::/ / \::::::/ /
\::::::/ / \:::\ \ /:::/ / \::::/ /
\::::/ / \:::\____\ /:::/ / \::/____/
\::/____/ \::/ / \::/ / ~~
~~ \/____/ \/____/
:: ${application.title} : ${application.formatted-version} ::
application.title和application.formatted-version可以通過在yml中增加配置實(shí)現(xiàn)替換表示應(yīng)用名稱和版本號(hào)
application:
title: "springboot-demo"
formatted-version: "1.0"
-
所有配置性的操作都做完了,該使用了
log使用.png
前面引入依賴的時(shí)候引入了lombok組件,(該組件可以簡(jiǎn)化代碼,使用方法大家可以搜一下),引用注解@Slf4j,在本類中就可以使用靜態(tài)變量log去記錄日志了
-
服務(wù)運(yùn)行后,控制臺(tái)日志以及日志文件生成
控制臺(tái).png
日志文件.png





