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)
目標
當自己在寫業務邏輯程式碼的時候,需要自己定義輸出日誌的內容。
實現
- 在
resources
目錄下新建一個檔案logback-spring.xml
- 在
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