spring boot 日誌收集整理

spring boot 日誌

1. 選擇那種日誌框架

slf4j 是抽像的接口層。也是spring boot 默認採用的接口層。

util.logging,log4j,logback,commons-logging默認採用的logback新一代的框架.其它的則是spring使用不的適配器來動態綁定到不同的日誌框架上。也有爲了適配不同的第三方包使用統一的日誌框架,而生出的包裝第三方日誌框架的適配包,並動態bind到logback上。

concrete-bindings

2.第三方包日誌框架不一致如何解決

結果是直接排除第三方包的日誌框架。


因爲spring-boot-starter-web中引過了logging的starter
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

slf4j

3.如何在properties或yml中配置日誌及優先級

1) 設置的優先級

外部文件>內部文件同級別的properties>yml,但是如果同時配置,會疊加生效

2) 配置文件設置

logging:
  level:
    org.springframework: ERROR
    com.antsdouble: DEBUG
  pattern:
    console: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
    file: "%d %p %c{1.} [%t] %m%n"
  file: app.log

3) 日誌的常識

  • 日誌級別從低到高分爲TRACE < DEBUG < INFO < WARN < ERROR < FATAL,只會輸出大於或等於設置級別的內容
  • 命令行參數--debug會啓動debug模式
  • logging.file 設置文件,lobbing.path設置路徑,如果只設了路徑會生成默認文件名spring.log,但是同時設置path不生效
  • 默認情況10M會切分日誌,並按不同級別生成不同文件

4.使用xml形式來配置日誌

在resources資源目錄下添加logback.xml文件並添加如下內容

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
     <contextName>logback</contextName>
    <property name="HOME_LOG" value="logs/app.log"/>

    <!--輸出到控制檯-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>ERROR</level>
         </filter>-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--輸出到文件-->
    <appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${HOME_LOG}</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/archived/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- each archived file, size max 10MB -->
            <maxFileSize>10MB</maxFileSize>
            <!-- total size of all archive files, if total size > 20GB,
                it will delete old archived file -->
            <totalSizeCap>20GB</totalSizeCap>
            <!-- 60 days to keep -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d %p %c{1.} [%t] %m%n</pattern>
        </encoder>
    </appender>

    <logger name="com.antsdouble" level="debug" additivity="false">

        <appender-ref ref="console"/>
    </logger>

    <root level="debug">
        <appender-ref ref="console"/>
        <appender-ref ref="FILE-ROLLING"/>
    </root>

</configuration>
  • 參數說明
  1. scan 爲真時,配置文件更新會被重新加載,默認爲真

  2. scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘

  3. debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false

  4. contextName:每個logger都關聯到logger上下文,默認上下文名稱爲“default”。但可以使用設置成其他名字,用於區分不同應用程序的記錄。一旦設置,不能修改,可以通過%contextName來打印日誌上下文名稱。

  5. appender :appender用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和文件輸出策略

  6. root :root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性

     level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置爲INHERITED或者同義詞NULL。
     默認是DEBUG。
     可以包含零個或多個元素,標識這個appender將會添加到這個logger

  7. logger :是按不同的包指定不同的級別,帶有多個logger的配置,指定級別,指定appender

5.日誌文件如何支持profile

  • 在資源目錄下添加logback-spring.xml文件,框架的自動配置類會接管日誌文件的配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <springProfile name="default">
        <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>
<!-- 測試環境+開發環境. 多個使用逗號隔開. -->
<springProfile name="test,dev">
    <logger name="com.dudu.controller" level="info" />
</springProfile>
    <springProfile name="prod">

        <appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>app.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>logs/archived/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <!-- each archived file, size max 10MB -->
                <maxFileSize>10MB</maxFileSize>
                <!-- total size of all archive files, if total size > 20GB, it will delete old archived file -->
                <totalSizeCap>20GB</totalSizeCap>
                <!-- 60 days to keep -->
                <maxHistory>60</maxHistory>
            </rollingPolicy>

            <encoder>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </encoder>
        </appender>

        <logger name="org.springframework" level="INFO"/>
        <logger name="com.mkyong" level="DEBUG"/>
        <root level="ERROR">
            <appender-ref ref="FILE-ROLLING"/>
        </root>
    </springProfile>

</configuration>
  • 支持多環境日誌springProfile添加多個配置段來實現

    java -jar xxx.jar –spring.profiles.active=prod
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章