1. 程式人生 > >Spring Boot Logback應用日誌

Spring Boot Logback應用日誌

日誌對於應用程式來說是非常重要的,Spring框架本身集成了不少其他工具,我們自身的應用也會使用到第三方庫,所以我們推薦在Spring應用中使用SLF4J/Logback來記錄日誌。

SLF4J與Logback簡介

SLF4J——Simple Logging Facade For Java,它是一個針對於各類Java日誌框架的統一Facade抽象。Java日誌框架眾多——常用的有java.util.logginglog4jlogbackcommons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定義了統一的日誌抽象介面,而真正的日誌實現則是在執行時決定的——它提供了各類日誌框架的binding。

Logback是log4j框架的作者開發的新一代日誌框架,它效率更高、能夠適應諸多的執行環境,同時天然支援SLF4J。

Spring Boot Logging

Spring Boot實現了一套日誌系統——它能夠根據類路徑上的內容來決定使用哪一種日誌框架,logback是最優先的選擇。配置了logback.xml可以利用Spring Boot提供的預設日誌配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"
/>
<logger name="org.springframework.web" level="DEBUG"/> </configuration>

這樣就定義了一個<logger>捕獲org.springframework.web的日誌,日誌級別是DEBUGbase.xml內容如下:

<included>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE"
value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </included>

Spring Boot的日誌系統預先定義了一些系統變數:

  • ${PID},當前程序ID
  • ${LOG_FILE},Spring Boot配置檔案中logging.file的值
  • ${LOG_PATH}, Spring Boot配置檔案中logging.path的值

同時預設情況下包含另個appender——一個是控制檯,一個是檔案,分別定義在console-appender.xmlfile-appender.xml中。同時對於應用的日誌級別也可以通過application.properties進行定義:

logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

這等價於在logback.xml配置appender的日誌級別。

ConsoleAppender

Logback使用appender來定義日誌輸出,在開發過程中最常用的是將日誌輸出到控制檯:

<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>TRACE</level>
  </filter>
</appender>

<encoder>表示對日誌進行編碼:

  • %d{HH:mm:ss.SSS}——日誌輸出時間
  • %thread——輸出日誌的程序名字,這在Web應用以及非同步任務處理中很有用
  • %-5level——日誌級別,並且使用5個字元靠左對齊
  • %logger{36}——日誌輸出者的名字
  • %msg——日誌訊息
  • %n——平臺的換行符

在這種格式下一條日誌的輸出結果如下:

0:12:51.012 [qtp231719230-45] DEBUG o.c.d.r.util.LoggingResponseFilter

RollingFileAppender

另一種常見的日誌輸出到檔案,隨著應用的執行時間越來越長,日誌也會增長的越來越多,將他們輸出到同一個檔案並非一個好辦法。RollingFileAppender用於切分檔案日誌:

<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>/data/log/app.log</File>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- daily rollover -->
    <FileNamePattern>rest-demo.%d{yyyy-MM-dd}.log</FileNamePattern>
    <!-- keep 30 days' worth of history -->
    <maxHistory>30</maxHistory>         
  </rollingPolicy>
  <encoder>
    <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
  </encoder>        
</appender>

其中重要的是rollingPolicy的定義,上例中<FileNamePattern>rest-demo.%d{yyyy-MM-dd}.log</FileNamePattern>定義了日誌的切分方式——把每一天的日誌歸檔到一個檔案中,<maxHistory>30</maxHistory>表示只保留最近30天的日誌,以防止日誌填滿整個磁碟空間。同理,可以使用%d{yyyy-MM-dd_HH-mm}來定義精確到分的日誌切分方式。

Sentry

Sentry是一個統一的日誌跟蹤平臺,在傳統的日誌管理中,都是在伺服器上通過tailvim等工具檢視日誌,並且不同的日誌位置也個不相同,而Sentry則是將這些日誌(主要是錯誤日誌)通過統一的介面收集起來,並且提供跟蹤、管理的功能,使得應用程式的錯誤、Bug能夠即時被解決。

Sentry提供了Java庫——Raven Java,Java應用程式能夠在捕獲異常後將其傳送到Sentry伺服器中,另一方面它包含了各類日誌框架的支援,以Logbakc為例:

<dependency>
    <groupId>net.kencochrane.raven</groupId>
    <artifactId>raven-logback</artifactId>
    <version>6.0.0</version>
</dependency>

logback.xml中定義appender

<configuration>
    <appender name="Sentry" class="net.kencochrane.raven.logback.SentryAppender">
        <dsn>https://publicKey:[email protected]:port/1?options</dsn>
        <tags>tag1:value1,tag2:value2</tags>
        <!-- Optional, allows to select the ravenFactory -->
        <!--<ravenFactory>net.kencochrane.raven.DefaultRavenFactory</ravenFactory>-->
    </appender>
    <root level="warn">
        <appender-ref ref="Sentry"/>
    </root>
</configuration>

我們推薦在這個<appender>中加入<filter>用於過濾ERROR級別的日誌。

相關推薦

Spring Boot Logback應用日誌

日誌對於應用程式來說是非常重要的,Spring框架本身集成了不少其他工具,我們自身的應用也會使用到第三方庫,所以我們推薦在Spring應用中使用SLF4J/Logback來記錄日誌。 SLF4J與Logback簡介 SLF4J——Simple Logging Faca

spring boot logback日誌彩色渲染

在logback.xml檔案中  修改位置如下: <property name="CONSOLE_LOG_PATTERN" value="%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS}) %boldYell

spring boot logback 多環境列印日誌

       spring boot預設使用的是logback列印日誌的,但它也支援log4j  log4j2等日誌(這些要調整匯入的jar包了),在專案的application.properties裡面只能簡單的配置一些日誌的相關資訊,如果想要配置複雜的日誌輸出,例如每天按

Spring boot logback日誌輸出多環境配置

本人專案結構如下圖:特備註意logback.xml必須要改成logback-spring.xml,參看https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-cus

Spring boot logback的使用(日誌記錄)

1 在spring boot中已經自動包含了logback的jar包,如果不是spring boot需要在maven中匯入依賴 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logbac

spring boot/cloud 應用監控

alt min .com cnblogs ima target 器監控 斷路器 htm 原文地址:http://www.cnblogs.com/skyblog/p/5633635.html 應用的監控功能,對於分布式系統非常重要。如果把分布式系統比作整個社會系統。那麽各個

基於Spring Boot構建應用開發規範

SpringBoot 項目規範 1.規範的意義和作用 編碼規範可以最大限度的提高團隊開發的合作效率 編碼規範可以盡可能的減少一個軟件的維護成本 , 並且幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護 編碼規範可以改善軟件的可讀性,可以讓開發人員盡快而徹底地理解新的代碼 規範性編碼

Spring Boot 企業級應用開發實戰

-o .com 註解 ping 折騰 jar 服務 開啟 blog Spring Boot 企業級應用開發實戰【下載地址:https://pan.baidu.com/s/1SbB-auGkUN6r2i6dtv7t_w 】 Spring Boot是目前Spring技術體系中炙

基於spring-boot應用程序的單元測試方案

supported nsa action throws 接口 insert tomat clas 資料 概述 本文主要介紹如何對基於spring-boot的web應用編寫單元測試、集成測試的代碼。 此類應用的架構圖一般如下所示: 我們項目的程序,對應到上圖中的web應用部

Spring boot-Logback

  1、logback簡單介紹 開源,是Log4j的改良版本 Springboot提供了一套日誌系統,lockback是最優選擇 2、結構 logback被分為三個元件:core、classic、access 其中,core提供了Logback的核心功能,另外兩個

spring boot如何整合日誌框架

1.application.yml   logging: config: classpath:logback-boot.xml 2.logback-boot.xml配置 <?xml version="1.0" encoding="UTF-8"?> <

Spring boot 4 應用打包部署

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring Boot 自定義日誌詳解

本節內容基於 Spring Boot 2.0. 你所需具備的基礎 什麼是 Spring Boot? Spring Boot 核心配置檔案詳解 Spring Boot 開啟的 2 種方式 Spring Boot 自動配置原理、實戰 Spring Boot 2.x 啟動全過程原始碼分析

基於spring-boot應用程序的單元+集成測試方案

回歸 path turn behavior pat 一個 match 多場景 mybatis框架 概述 本文主要介紹單元測試、集成測試相關的概念、技術實現以及最佳實踐。 本文的demo是基於Java語言,Spring Boot構建的web應用。測試框架使用Junit,模擬框

基於spring-boot應用程式的單元+整合測試方案

概述 本文主要介紹單元測試、整合測試相關的概念、技術實現以及最佳實踐。 本文的demo是基於Java語言,Spring Boot構建的web應用。測試框架使用Junit,模擬框架使用mockito。 之前曾經總結過一篇文章:基於spring-boot的應用程式的單元測試方案,但是當時只是從技術實現的角度

Spring Boot Web應用開發 CORS 跨域請求設定 Invalid CORS request

使用SpringBoot Web開發程式時,前後端分離時,經常遇到跨域問題,特別是很多情況下Firefox瀏覽器沒有問題,而chrome瀏覽器有問題,僅僅從瀏覽器的web控制檯很難發現有效的錯誤或者告警資訊,因此在開發程式很有必要在開發階段就考慮到並配置好跨域。 SpringBoot

spring boot Tomcat訪問日誌

1.Tomcat設定訪問日誌 1 <Host name="localhost" appBase="webapps" 2 unpackWARs="true" autoDeploy="true"> 3 <!-- 4 <

Spring Boot 啟動應用原理

1.執行run方法 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start();

分享spring boot controller統一日誌程式碼

最近專案需要做一個controller層的aop,主要解決下面問題: 1.controller日誌統一列印輸出json格式,相容json和velocity 。 2.專案異常處理 3.異常郵件傳送 4.頁面訪問統計 主要思路使用aop實現,controller引數統一使用@RequestParam接收

SpringBoot進階篇4:Spring Boot EHCache應用

1、SpringBoot Cache       Spring Boot 本身提供了一個基於ConcurrentHashMap 的快取機制,也集成了EhCache2.x、JCache CJSR-107、EhCache3.x、Infinispan ),還有Couchb