1. 程式人生 > >【SpringBoot系列】五、SpringBoot 日誌配置(logback)

【SpringBoot系列】五、SpringBoot 日誌配置(logback)

     SpringBoot支援Java Util Logging,Log4J,Log4J2和Logback日誌框架,預設採用logback日誌。在實際SpringBoot專案中使用SpringBoot預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架,靈活調整日誌輸出級別、日誌輸出格式等。本章主要講述如何進行SpringBoot專案的日誌詳細配置。

(強烈建議使用Logback日誌配置,因為它比log4j效能好多很多。)

1、新增日誌依賴包

    SpringBoot專案中依賴包spring-boot-starter中已經包含spring-boot-starter-logging,

該依賴包就是預設的logback日誌框架,則不需額外引入。


2、新增logback.xml

在/springboot/src/main/resources目錄下,新建日誌配置檔案logback.xml,如下:

(配置說明見註釋)

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 
    scan:當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true
    scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位預設單位是毫秒,當scan為true時此屬性生效,預設時間間隔為1分鐘
    debug:當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態,預設值為false
 -->
<configuration scan="true" scanPeriod="2 seconds">
    <!--
     	定義滾動記錄檔案appender 作用:滾動記錄檔案,先將日誌記錄到指定檔案,當符合某個條件時,將日誌記錄到其他檔案 
        RollingFileAppender class="ch.qos.logback.core.rolling.RollingFileAppender"
       	 引數: 
            <append>:如果是true日誌被追加到檔案結尾,如果是false清空現存檔案,預設是true
            <file>:被寫入的檔名,可以是相對目錄也可以是絕對目錄,如果上級目錄不存在會自動建立,沒有預設值
            <rollingPolicy>:當發生滾動時,決定RollingFileAppender的行為,涉及檔案移動和重新命名
            <triggeringPolicy>:告知RollingFileAppender合適啟用滾動
            <prudent>:當為true時不支援FixedWindowRollingPolicy支援TimeBasedRollingPolicy,但是有兩個限制:1不支援也不允許檔案壓縮,2不能設定file屬性必須留空
    -->
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 如果是true,日誌被追加到檔案結尾,如果是false,清空現存檔案.預設是true -->
        <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        	<!-- 每天滾動一次的日誌 只保留30天內的日誌檔案 -->
            <fileNamePattern>logs/%d{yyyy-MM-dd}/springboot_%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        	<!-- 對日誌進行格式化 -->
            <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
        	<charset>utf-8</charset>
        </encoder>
    </appender>

    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/%d{yyyy-MM-dd}/springboot-error_%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
        	<charset>utf-8</charset>
        </encoder>
        <!-- 
             配置日誌級別過濾器 作用:根據日誌級別進行過濾,如果日誌級別等於配置級別過濾器會根據onMath和onMismatch接收或拒絕日誌
             引數:
             <level>:設定過濾級別
             <onMatch>:用於配置符合過濾條件的操作
             <onMismatch>:用於配置不符合過濾條件的操作
                                       此處配置為只接收ERROR日誌級別資訊
         -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 定義控制檯appender 作用:把日誌輸出到控制檯 class="ch.qos.logback.core.ConsoleAppender" -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
        </layout>
    </appender>

    <!-- 將root的列印級別設定為"error",指定了名字為"console","fileAppender","errorAppender"的appender -->
    <root level="error">
    	<appender-ref ref="console"/>
        <appender-ref ref="fileAppender"/>
        <appender-ref ref="errorAppender"/>
    </root>
    
    <!--                    
        logger用來設定某一個包的日誌列印級別
        <loger> 僅有一個name屬性,一個可選的level和一個可選的addtivity屬性
                name:用來指定受此loger約束的某一個包或者具體的某一個類
                level:用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
                addtivity:是否向上級loger傳遞列印資訊。預設是true,會將資訊輸入到root配置指定的地方,可以包含多個appender-ref,標識這個appender會新增到這個logger
    -->
    <logger name="com.xcbeyond.springboot" level="debug"/>
</configuration>

3、日誌列印。

    已專案啟動類中輸出debug日誌為例說明。

package com.xcbeyond.springboot;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * SpringBoot啟動類
 * @author xcbeyond
 * 2018年7月2日下午5:41:45
 */
@SpringBootApplication
public class SpringbootApplication {
	private static Logger logger = LoggerFactory.getLogger(SpringbootApplication.class);
public static void main(String[] args) { if(logger.isDebugEnabled()) { logger.debug("SpringBoot starting..."); } SpringApplication.run(SpringbootApplication.class, args); } }

注:請使用包org.slf4j.Logger、org.slf4j.LoggerFactory。SLF4J只是一個日誌標準,並不是日誌框架的具體實現,便於後期維護時可以根據不同的日誌 框架配置不同型別的日誌,而不用修改日誌輸出程式碼。

4、啟動專案。

    在專案的同級目錄下會生成logs\2018-07-11\日誌資料夾及日誌檔案。


相關推薦

SpringBoot系列SpringBoot 日誌配置(logback)

     SpringBoot支援Java Util Logging,Log4J,Log4J2和Logback日誌框架,預設採用logback日誌。在實際SpringBoot專案中使用SpringBoot預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架

SpringBoot 系列SpringBoot專案搭建

一、引言:什麼是spring boot?    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。用我的話來理解,就是spring

springboot系列springboot整合PageHelper

一、介紹 專案中經常會遇到分頁,PageHelper為我們解決了這個問題。本質上實現了Mybatis的攔截器,作了分頁處理。 二、配置PageHelper 1、引入依賴 pagehelper-spring-boot-starter對了pagehelper做了封裝,減少 了配置檔案,只需要在yml新增就

表格建模系列創建分區

ant ntp amt intern cost track end pct 2-0 右鍵單擊FactInternetSales > 分區。 創建如下分區: FactInternetSales2010。SQL: SELECT [dbo].[FactInterne

spring 國際化springMVCspringboot國際化處理詳解

在web開發中我們常常會遇到國際化語言處理問題,那麼如何來做到國際化呢? 你能get的知識點? 使用springgmvc與thymeleaf進行國際化處理。 使用springgmvc與jsp進行國際化處理。 使用springboot與thymeleaf進行國際化處理。 目錄你能get的知識點?你必須要

SpringCloud系列配置集中化管理--配置中心(Spring Cloud Config)

1、簡介       在基於微服務架構下開發,由於服務數量巨多、在高可用性的驅使下要進行叢集時,眾多節點及服務的配置管理,變得苦不堪言,簡直成了體力活,稍微不細心將會出現配置錯誤。為了方便服務配置資訊的統一集中化管理,實時更新,SpringCloud中Spring

springboot系列十二springboot整合RestTemplateswaggerUI

一、背景介紹  在微服務都是以HTTP介面的形式暴露自身服務的,因此在呼叫遠端服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、Netty的非同步HTTP Client, Spring的RestTemplate。這裡介紹的是RestTe

Spring 系列如何從spring中獲取bean

導包 spring要管理的類資訊 package com.liuyong666.service.impl; ​ import com.liuyong666.service.PersonService; public class PersonServiceBean implements Person

Spark系列Spark工作機制

Spark工作機制 Client Driver程式 Spark Context RDD DAG DAGSchedular TaskSchedular SparkEnv Worker Node

WCF系列(三)如何配置和承載服務

支持 一個 地址 BE eof spa 介紹 alt contract 如何配置和承載服務 配置綁定 配置服務:任務 為什麽要配置服務:在設計和實現服務協定後,即可配置服務。 在其中可以定義和自定義如何向客戶端公開服務指定可以找到服務的地址、服務用於發送和接收消息的傳

框架整合Spring資料來源配置及JdbcTemplate配置

一、匯入必需包 c3p0-0.9.1.2.jar commons-dbcp-1.4.jar commons-pool-1.6.jar mysql-connector-java-5.1.24.jar 二、 建立jdbc.properties jdbc.driverC

SpringBoot系列十一:SpringBoot整合Restful架構(使用 RestTemplate 模版實現 Rest 服務調用Swagger 集成動態修改日誌級別)

attribute tar ring 動態修改 包含 分布式 restfu pen 負載 1、概念:SpringBoot整合Restful架構 2、背景 Spring 與 Restful 整合才是微架構的核心,雖然在整個 SpringBoot(SpringCloud)之中提

SpringSecurity系列SpringBoot整合SpringSecurity新增驗證碼登入

上一篇博文已經介紹過了SpringSecurity的表單登入,這裡我們基於上一篇的基礎上,新增一個驗證碼進行登入,登入頁面效果圖,如圖所示: 首先我們需要建立驗證碼的生成規則,首先建立一個驗證碼的實體: public class ImageCode { /** 驗證碼 */

SpringSecurity系列SpringBoot整合SpringSecurity的表單登入

在如今的專案開發中,登入和許可權管理是一個專案最基本的需求,對於這個需求SpringSecurity一個很好的架構,這一系列博文是我自己學習SpringSecurity的一些總結和自己踩過的坑和從零開始搭接一個完整的基於SpringSecurity的登入(包括第三方的登入)和許可權管理的專案。

springboot4SpringBoot+Mybatis多表操作以及增刪改查

Mybatis整合成功之後,接下來了解一下增刪改查的配置以及多表操作,先從增刪改查開始 為了方便後面的多表操作,現在針對資料表的配置我這裡全部在xml中配置(暫時不用註解的方式了),先看一下目前的工程結構(注意包名) 首先為了瞭解增刪改查的操作,我這裡將針對資料庫中的一個文

SpringBoot系列SpringBoot註解詳解

一、註解(annotations)列表  @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration註解。其中@ComponentScan讓Spring Boot掃描到Con

SpringBoot系列springboot靜態變數注入

【場景】 配置檔案中的配置項的讀取,例如:defaultTimes=3 【變數獲取】 1.一般變數獲取 @Value("${defaultTimes}") private String defaultTimes; 2.靜態變數獲取 @Component public cl

SpringBoot 基礎系列實現一個自定義配置載入器(應用篇)

![](https://spring.hhui.top/spring-blog/imgs/200507/logo.jpg) > [【SpringBoot 基礎系列】實現一個自定義配置載入器(應用篇)](https://mp.weixin.qq.com/s?__biz=MzU3MTAzNTMzMQ==&

Appnium+C#+Winform自動化測試系列獲取本機連接的設備啟動多個Appnium和獲取本機啟動的Appnium

net 系列 () 定向 目的 res listening toa 路徑     本系列內容,準備根據所完成的項目為基線,一步一步的把整個設計和實現過程梳理。 先從基本的一些環境問題入手,梳理清楚關於手機設備和Appnium。因為我們在後面的建立Appnium連接時,需要

表格建模系列添加數據

geography custom img eof pan ipaddress customer fwe ebr 加載如下表並清空相應字段: DimCustomer清除字段: SpanishEducation, FrenchEducation, SpanishOccupati