1. 程式人生 > >Spring Boot全日誌設定

Spring Boot全日誌設定

說在前面

這裡日誌分兩種。一種是tomcat的輸出(系統)日誌,一種是自己定義的日誌。

系統日誌設定

目標

當springboot接收到請求時記錄日誌到檔案中

實現

你只需要在你的綠葉application.properties配置檔案中加入一下的配置

system.root.path=D:
server.tomcat.basedir=${system.root.path}/log/tomcat_log
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%t %a "%r" %s %S (%D ms)

效果

它就會自動在D:/log/tomcat_log目錄下生成所有請求的日誌

[26/Jul/2017:15:42:19 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (72 ms)
[26/Jul/2017:15:42:23 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (6 ms)
[26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "GET /view/recommendedSetting HTTP/1.1" 200 - (4 ms)
[26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "
GET /assets/css/bootstrap.css.map HTTP/1.1" 404 - (5 ms) [26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (6 ms) [26/Jul/2017:15:42:25 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (5 ms) [26/Jul/2017:15:42:26 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (54 ms) [26/Jul/2017:15:42:29 +0800] 0:0:0:0:0:0:0:1 "
GET /view/blank.html HTTP/1.1" 404 - (7 ms) [26/Jul/2017:15:42:29 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (4 ms) [26/Jul/2017:15:42:30 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (16 ms) [26/Jul/2017:15:42:30 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (4 ms) [26/Jul/2017:15:42:31 +0800] 0:0:0:0:0:0:0:1 "GET /assets/css/bootstrap.css.map HTTP/1.1" 404 - (4 ms) [26/Jul/2017:15:42:32 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (3 ms) [26/Jul/2017:15:42:33 +0800] 0:0:0:0:0:0:0:1 "GET /view/form_component.html HTTP/1.1" 404 - (9 ms)

自定義日誌設定(logback)

目標

當自己在寫業務邏輯程式碼的時候,需要自己定義輸出日誌的內容。

實現

  1. resources目錄下新建一個檔案logback-spring.xml
  2. logback-spring.xml寫入以下內容。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <contextName>Logback For demo Mobile</contextName>

    <!-- 設定log日誌存放地址 -->
    <!--(改) 單環境設定 -->
    <property name="LOG_HOME" value="D:/log/tomcat_log" />

    <!-- 多環境設定 (如果你需要設定區分 生產環境,測試環境...)-->
    <!-- 如果需要設定多環境的配置,只設置以下注釋內容是不夠的,還需要給每個環境設定對應的配置檔案如(application-dev.properties)-->
   <!--  
   <springProfile name="linux">
        <property name="LOG_HOME" value="/home/logger/mobile_log" />
    </springProfile>
    <springProfile name="dev">
        <property name="LOG_HOME" value="D:/logger/log4j" />
    </springProfile>
    <springProfile name="test">
        <property name="LOG_HOME" value="D:/logger/log" />
    </springProfile>
    <springProfile name="prod">
        <property name="LOG_HOME" value="D:/logger/log" />
    -->


    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder預設配置為PartternLayoutEncoder -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%n</pattern>
        </encoder>
        <target>System.out</target>
    </appender>

    <!-- 按照每天生成日誌檔案 -->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名 ,每天儲存(側翻)一次 -->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌檔案保留天數 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日誌檔案最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- (改)過濾器,可以指定哪些包,哪個記錄到等級, -->
    <!-- 運用的場景比如,你只需要com.demo.controller包下的error日誌輸出。定義好name="com.demo.controller" level="ERROR" 就行了 -->
    <logger name="com" level="ERROR">
        <appender-ref ref="ROLLING_FILE" />
    </logger>

    <!-- 全域性,控制檯遇到INFO及以上級別就進行輸出 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

3.怎麼使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ViewController

    // 日誌記錄工具,這些都是包裡有的,直接用就行不用其他的實現。後面的類名是本類的類名
    private static final Logger log = LoggerFactory.getLogger(ViewController.class);

    // 首頁
    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index(HttpServletRequest request) {
        //這樣呼叫
        log.error("自己定義的日誌輸出異常");

        return "index";
    }
}

效果

就是在你設定的日誌目錄裡有生成一個檔案,裡面會有你定義的日誌。

擴充套件(全域性異常捕捉,並通過日誌輸出)

目標

當我們伺服器處理請求的時候,可能會產生一些我們沒有捕捉到的異常。那麼我們需要做的就是,設定全域性的異常捕捉,並把異常的內容(堆疊資訊)輸出到日子檔案中。

實現

1.新建一個類檔案GlobalExceptionHandler寫入以下內容

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * User: Qiu Nick
 * Date: 2017-07-26
 * Time: 15:49
 * Description: 全域性異常捕獲
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    // 日誌記錄工具
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = Exception.class)
    public void handleGlobalException(HttpServletRequest req, Exception ex) {

        //列印堆疊日誌到日誌檔案中
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        ex.printStackTrace(new java.io.PrintWriter(buf, true));
        String  expMessage = buf.toString();
        try {
            buf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //記錄到日誌
        log.error("GlobalExceptionHandler,捕獲異常:"+ ex.getMessage() + ";eString:" + expMessage);
    }
}

效果

通過列印的日誌你就能定位到出現錯誤的地方,非常方便。(這裡模擬了一個除0的異常-ViewController.java:72)

===2017-07-26 16:43:45.018 ERROR com.demo.config.GlobalExceptionHandler Line:46  - GlobalExceptionHandler,捕獲異常:/ by zero;eString:java.lang.ArithmeticException: / by zero
    at com.truesun.controller.ViewController.slideshowSetting(ViewController.java:72)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

相關推薦

Spring Boot日誌設定

說在前面 這裡日誌分兩種。一種是tomcat的輸出(系統)日誌,一種是自己定義的日誌。 系統日誌設定 目標 當springboot接收到請求時記錄日誌到檔案中 實現 你只需要在你的綠葉application.properties配置檔案中加入一下的配

IDEA編輯Spring-Boot Web,設定日誌級別,並列印到相應的目錄下。

我使用的日誌框架是logback。我們的目的是把INFO日誌和ERROR分開到不同的檔案中,並且能夠每日形成一個日誌檔案。 第一步,使用idea建立一個Spring-Boot的專案 一直預設,有關SpringBoot基礎建立都不清楚的話,可以先去看看入門教程,到這步的

關於spring-boot日誌輸出到控制臺和指定文件的配置

add contex ring level true source ont utf onf (1)問題:在本地使用spring-boot開發的程序,一直想讓文件按照天輸出到某個文件夾下面。但是一直成功。 解決過程: 想到日誌優先想著配置lo

Spring Boot 局異常配置

處理異常 framework details TE exce model PE exc urn Spring Boot 全局異常配置,處理異常控制器需要和發生異常的方法在一個類中。使用 ControllerAdvice 註解 package com.li.controll

Spring Boot-局異常處理(八)

set temp ajax tac itl resp produce lec div SpringBoot默認異常默認處理機制 Spring boot錯誤異常時通過BasicErrorController來處理的 通過判斷是瀏覽器請求還是ajax請求響應頁面或者json

Spring boot局捕獲異常處理!

resultmap () del 進行 指定 return spring ring com package com.htli.util; import java.util.HashMap; import java.util.Map; import org.

Spring Boot日誌篇):整合預設日誌logback

目錄 說在前面 logback(Spring Boot 預設日誌) 在pom.xml加入相關依賴 日誌級別 控制檯輸出 lombok方式 日誌檔案輸出 儲存路徑 級別控制 輸出格式 自定義日誌配置 根節點包含的屬性 屬性一: 設定上下

Spring Boot 配置檔案設定(三)

簡介 上篇我們做了一些簡單的執行檔案的配置,本篇帶領大家來認識常用的一些配置,當然了關於Spring Boot 這些配置太多太多了,如果想了解更多的話直接上官網參考一下,瞭解相關案例如本篇的配置。 application.properties配置官方指南參考。

Spring Boot Cache + redis 設定有效時間和自動重新整理快取,時間支援在配置檔案中配置

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

【SpringBoot學習之路】09.Spring Boot日誌

轉載宣告:商業轉載請聯絡作者獲得授權,非商業轉載請註明出處.原文來自 © 呆萌鍾 【SpringBoot學習之路】09.Spring Boot與日誌 日誌框架 市場上存在非常多的日誌框架。JUL(java.util.logging),JCL(Apache

spring boot log 日誌配置

思路:  1.在yml 檔案中配置log日誌路徑  2.在java中引入log包呼叫 inif()方法寫入內容  3.在yml配置的路徑中生成log檔案 .java @RestController public class DeptControl

微服務框架(十三)Spring Boot Logstash日誌採集

  此係列文章將會描述Java框架Spring Boot、服務治理框架Dubbo、應用容器引擎Docker,及使用Spring Boot整合Dubbo、Mybatis等開源框架,其中穿插著Spring Boot中日誌切面等技術的實現,然後通過gitlab-CI以持續整合為Docker映

Spring boot配置日誌

<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT

Spring Boot預設日誌的配置.md

Sprong Boot使用的預設日誌框架是Logback: 預設的日誌輸出格式如下: 2016-04-13 08:23:50.120 INFO 37397 --- [ m

Spring Boot + Log4j2 日誌框架配置 (Maven)

參考Spring Boot官方文件 日誌部分 Spring Boot預設情況下,當使用"Starters" 使用Logback輸出日誌 , 還包括適當的Logback路由, 確保其他的日誌框架(Java Util Logging, Commons Logging, Lo

Spring Boot日誌的關係

市面上的日誌框架; JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 日誌門面 (日誌的抽象層) 日誌實現 JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-

spring-boot 錯誤日誌

最近一個專案中用到了springboot  在專案啟動後報錯: ===2018-11-19 08:47:10.796 INFO org.apache.coyote.http11.Http11Processor Line:182 - Error parsing HTTP r

Spring Boot日誌記錄

Spring Boot 之日誌記錄 Spring Boot 支援整合 Java 世界主流的日誌庫。 如果對於 Java 日誌庫不熟悉,可以參考:細說 Java 主流日誌工具庫 關鍵詞: log4j, log4j2, logback, slf4j 日誌格式 控制檯輸出

Spring Boot學習日誌(一)Hello World

目錄 一,系統環境 JDK:1.8.0_144 maven:3.5.2 二,使用IntelliJ IDEA建立專案 1,選擇專案型別 2,編輯專案資訊 這裡packaging可以選擇jar 或者 war 3,選擇需要的war包

Spring Boot Web Server設定tomcat cache size

問題描述 基於SpringBoot搭建了web服務,在伺服器端啟動時tomcat顯示[WARN]資訊,提示由於cache不足導致resource無法載入,需要增加cache的最大值。 WARN如下: [localhost-startStop-1] [Cache] [179] [U