最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文秒懂logstash收集springboot日志的方法

 更新時間:2021年04月29日 11:44:41   作者:bartggg  
通過這篇文章帶你了解logstash收集springboot日志的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

maven依賴

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.1</version>
</dependency>

springboot 配置文件

logging:
  config: classpath:logback.xml

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml" />
	<!--======================================= 本地變量 ======================================== -->
	<!--在沒有定義${LOG_HOME}系統(tǒng)變量的時候,可以設(shè)置此本地變量。提交測試、上線時,要將其注釋掉,使用系統(tǒng)變量。 -->
	<property name="LOG_HOME" value="logs/spring.log" />

	<!-- 應(yīng)用名稱:和統(tǒng)一配置中的項目代碼保持一致(小寫) -->
	<property name="APP_NAME" value="log" />
	<!--日志文件保留天數(shù) -->
	<property name="LOG_MAX_HISTORY" value="30" />
	<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑 -->
	<!--應(yīng)用日志文件保存路徑 -->
	<property name="LOG_APP_HOME" value="${APP_NAME}/%d{yyyy-MM-dd}" />

	<!--=========================== 按照每天生成日志文件:默認(rèn)配置=================================== -->
	<!-- 控制臺輸出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
		</encoder>
	</appender>
	<!-- 按照每天生成日志文件:主項目日志 -->
	<appender name="APP"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志文件輸出的文件名 -->
			<FileNamePattern>${LOG_APP_HOME}/base.%d{yyyy-MM-dd}.log
			</FileNamePattern>
			<!--日志文件保留天數(shù) -->
			<MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{500} - %msg%n</pattern>
		</encoder>
	</appender>
	<!--=============================== 日志輸出: 默認(rèn)主業(yè)務(wù)日志 ====================================== -->
	<logger name="org.springframework">
		<level value="WARN" />
	</logger>
	<logger name="org.apache.shiro">
		<level value="WARN" />
	</logger>
	<logger name="freemarker">
		<level value="WARN" />
	</logger>
	<logger name="org.hibernate">
		<level value="WARN" />
	</logger>
	<logger name="org.hibernate.SQL">
		<level value="DEBUG" />
	</logger>
	<logger name="org.apache.ibatis">
		<level value="DEBUG" />
	</logger>
	<logger name="org.mybatis.spring">
		<level value="DEBUG" />
	</logger>
	<logger name="com.alibaba.druid">
		<level value="DEBUG,INFO" />
	</logger>
    <!-- 這里是你的業(yè)務(wù)的包名 -->
    <logger name="com.bart.elk">
		<level value="DEBUG" />
	</logger>
	<!-- logstash ip和暴露的端口,我目前理解就是通過這個地址把日志發(fā)送過去  -->
	<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<!-- 和logstash 的input 配置的端口保持一致 -->
        <destination>localhost:4567</destination> 
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
	<root level="warn,info,debug">
		<appender-ref ref="APP" />
		<appender-ref ref="STDOUT" />
		<appender-ref ref="LOGSTASH" />
        <appender-ref ref="CONSOLE" />
	</root>
</configuration>

logstash

springboot-log.conf

# 文檔 
# https://www.elastic.co/guide/en/logstash/5.6/input-plugins.html
# https://www.elastic.co/guide/en/logstash/6.1/input-plugins.html
input{
	tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4567
        codec => json_lines
	}
}

output{
    # 為了模擬測試就先不放es了,在控制臺輸出測試看看
	#elasticsearch{
	#    hosts=>["127.0.0.1:9200"]
	#    index => "springboot-elk-%{+YYYY.MM.dd}"
    #}
	stdout{
		codec => rubydebug
	}
}

測試接口

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@RestController
public class ApiTests {

	protected final static Logger log = LoggerFactory.getLogger(ApiTests.class);
	
	@GetMapping("/api/log")
	public Object log() {
		ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = requestAttributes.getRequest();
		String ip = request.getRemoteAddr();
		String uri = request.getRequestURI();
		String logStr = String.format("IP=[%s] send request URI = [%s]", ip, uri);
		log.debug("[debug] "+logStr);
		log.info("[info] "+logStr);
		log.warn("[warn] "+logStr);
		log.error("[error] "+logStr);
		return "ok : "+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
	}	
}

測試效果

先運行l(wèi)ogstash

# linux: 
bin/logstash -f config/springboot-log.conf

# windows: 
bin\logstash.bat -f config/springboot-log.conf

在運行springboot項目,然后調(diào)用測試接口:http://localhost:8080/api/log

觀察logstash控制臺輸出:

{
     "@timestamp" => 2021-04-28T15:40:43.182Z,
          "level" => "DEBUG",
           "port" => 57778,
    "thread_name" => "http-nio-8080-exec-1",
    "level_value" => 10000,
       "@version" => "1",
           "host" => "127.0.0.1",
    "logger_name" => "com.bart.elk.ApiTests",
        "message" => "[debug] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
     "@timestamp" => 2021-04-28T15:40:43.182Z,
          "level" => "INFO",
           "port" => 57778,
    "thread_name" => "http-nio-8080-exec-1",
    "level_value" => 20000,
       "@version" => "1",
           "host" => "127.0.0.1",
    "logger_name" => "com.bart.elk.ApiTests",
        "message" => "[info] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
     "@timestamp" => 2021-04-28T15:40:43.183Z,
          "level" => "WARN",
           "port" => 57778,
    "thread_name" => "http-nio-8080-exec-1",
    "level_value" => 30000,
       "@version" => "1",
           "host" => "127.0.0.1",
    "logger_name" => "com.bart.elk.ApiTests",
        "message" => "[warn] IP=[127.0.0.1] send request URI = [/api/log]"
}
{
     "@timestamp" => 2021-04-28T15:40:43.183Z,
          "level" => "ERROR",
           "port" => 57778,
    "thread_name" => "http-nio-8080-exec-1",
    "level_value" => 40000,
       "@version" => "1",
           "host" => "127.0.0.1",
    "logger_name" => "com.bart.elk.ApiTests",
        "message" => "[error] IP=[127.0.0.1] send request URI = [/api/log]"
}

說明運行成功!

參考說明:

logstash-logback-encoder

參考博客-1

參考博客-2

logstash 文檔

到此這篇關(guān)于一文秒懂logstash收集springboot日志的方法的文章就介紹到這了,更多相關(guān)logstash收集springboot日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA新建JAVA項目簡單圖文教程

    IDEA新建JAVA項目簡單圖文教程

    這篇文章主要給大家介紹了關(guān)于IDEA新建JAVA項目的相關(guān)資料,IDEA是現(xiàn)在java中最為常用的編譯器,所以如何使用IDEA來創(chuàng)建java項目呢,這里給大家總結(jié)下,需要的朋友可以參考下
    2023-08-08
  • 詳解Java設(shè)計模式之職責(zé)鏈模式

    詳解Java設(shè)計模式之職責(zé)鏈模式

    責(zé)任鏈模式是一種行為設(shè)計模式,使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java泛型中<?>和<T>的區(qū)別淺析

    Java泛型中<?>和<T>的區(qū)別淺析

    <T>和<?>的區(qū)別 <T>是參數(shù)類型,常常用于泛型類或泛型方法的定義,下面這篇文章主要給大家介紹了關(guān)于Java泛型中<?>和<T>區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • java字符串遍歷以及統(tǒng)計字符串中各類字符

    java字符串遍歷以及統(tǒng)計字符串中各類字符

    這篇文章主要為大家詳細(xì)介紹了java字符串遍歷以及字符串中各類字符統(tǒng)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java編譯時指定classpath的實現(xiàn)方法

    java編譯時指定classpath的實現(xiàn)方法

    在Java編程中,classpath是用于指定Java虛擬機(jī)在運行時查找類文件的路徑,本文主要介紹了java編譯時指定classpath的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java面試題沖刺第二十六天--實戰(zhàn)編程2

    Java面試題沖刺第二十六天--實戰(zhàn)編程2

    這篇文章主要為大家分享了最有價值的三道java實戰(zhàn)編程的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java禁止使用finalize方法

    Java禁止使用finalize方法

    這篇文章主要介紹了Java禁止使用finalize方法,需要的朋友可以參考下
    2017-10-10
  • java關(guān)于Date日期類型的大小比較

    java關(guān)于Date日期類型的大小比較

    這篇文章主要介紹了java關(guān)于Date日期類型的大小比較,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JPA原生SQL(自定義SQL)分頁查詢邏輯詳解

    JPA原生SQL(自定義SQL)分頁查詢邏輯詳解

    這篇文章主要介紹了JPA原生SQL(自定義SQL)分頁查詢邏輯詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java生成jar包的方法

    java生成jar包的方法

    這篇文章主要介紹了java生成jar包的方法,對Java生成jar包的具體步驟及方法進(jìn)行了較為詳細(xì)的描述,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09

最新評論

兴安盟| 毕节市| 珠海市| 吉木乃县| 门源| 双鸭山市| 嘉峪关市| 永安市| 罗甸县| 泸溪县| 达日县| 富蕴县| 蒲城县| 永川市| 永兴县| 富民县| 乌兰浩特市| 盐山县| 大足县| 收藏| 绥中县| 麟游县| 固始县| 高青县| 株洲县| 浮山县| 增城市| 秦安县| 竹北市| 曲水县| 嘉峪关市| 延津县| 沁源县| 乌恰县| 嘉义市| 大埔县| 新竹县| 祁阳县| 武穴市| 泸西县| 娄底市|