springboot 之日志配置

前言

一直沒機(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ù)框架

開始集成

  1. 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>
  1. application.yml中增加logging的配置


    logging配置.png
# Logging settings.
logging:
  config: classpath:logback-spring.xml
  1. 右鍵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配置模式.png
  1. 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"
  1. 所有配置性的操作都做完了,該使用了


    log使用.png

    前面引入依賴的時(shí)候引入了lombok組件,(該組件可以簡(jiǎn)化代碼,使用方法大家可以搜一下),引用注解@Slf4j,在本類中就可以使用靜態(tài)變量log去記錄日志了

  2. 服務(wù)運(yùn)行后,控制臺(tái)日志以及日志文件生成


    控制臺(tái).png

    日志文件.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容