天天看点

Spring Boot(日志篇):Logback集成ELK,处理日志实例作用logback(Spring Boot 默认日志)在pom.xml加入相关依赖logback.xml日志配置logstash-sample.conf配置总结

鐩綍

浣滅敤

logback锛圫pring Boot 榛樿鏃ュ織锛?

鍦╬om.xml鍔犲叆鐩稿叧渚濊禆

logback.xml鏃ュ織閰嶇疆

瀛愯妭鐐逛竴锛氭坊鍔犲櫒

logstash-sample.conf閰嶇疆

鎬荤粨

浣滅敤

浣滀负寮€鍙戯紝鏃ュ織鏄彲浠ヨ鏄渶閲嶈锛屾病鏈変箣涓€鐨勪笢瑗裤€傛湁浠g爜灏变竴瀹氳鏈夋棩蹇楋紝鏃ュ織鍐欑殑瓒婅缁嗭紝澶勭悊鍣╞ug鏉ヨ秺绠€鍗曪紝瑙e喅闂涔熻秺瀹规槗锛屾墍浠ョ爜浠g爜涔嬪墠鍔″繀鍏堢悊瑙f棩蹇楁槸鎬庝箞鐢熸垚鐨勩€?

鏈枃鍙粙缁?Spring Boot 濡備綍鍦ㄩ泦鎴?LogBack鐨勬儏鍐典笅 灏嗘棩蹇椾紶杈撳埌 杩滅骞冲彴 ELK銆?

ELK锛孍lasticsearch锛宭ogstash锛宬ibana绠€浠嬶紝閰嶇疆锛屽惎鍔紝璇风洿鎺ョ偣鍑诲搴旂殑鍚嶅瓧銆?

logback锛圫pring Boot 榛樿鏃ュ織锛?/h1>

Logback鏄痩og4j妗嗘灦鐨勪綔鑰呭紑鍙戠殑鏂颁竴浠f棩蹇楁鏋讹紝瀹冩晥鐜囨洿楂樸€佽兘澶熼€傚簲璇稿鐨勮繍琛岀幆澧冿紝鍚屾椂澶╃劧鏀寔SLF4J銆?

Spring Boot 锛堟棩蹇楃瘒锛夛細闆嗘垚榛樿鏃ュ織logback锛歨ttps://blog.csdn.net/Soinice/article/details/82424815

鍦╬om.xml鍔犲叆鐩稿叧渚濊禆

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.9</version>
</dependency>
           
鍦ㄦ垜浠殑鍏ュ彛绫讳腑濉啓鏃ュ織杈撳嚭
package elk;

import com.cmge.sdk.charge.CmgeChargeSdkApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CmgeChargeSdkApplication.class)
public class ElkTest {
    // 瀹氫箟涓€涓叏灞€鐨勮褰曞櫒锛岄€氳繃LoggerFactory鑾峰彇
    private final static Logger log = LoggerFactory.getLogger(ElkTest.class);

    @Test
    public void test() {
        log.trace("trace 鎴愬姛浜?);
        log.debug("debug 鎴愬姛浜?);
        log.info("info 鎴愬姛浜?);
        log.warn("warn 鎴愬姛浜?);
        log.error("error 鎴愬姛浜?);
    }
}
           

logback.xml鏃ュ織閰嶇疆

Spring Boot瀹樻柟鎺ㄨ崘浼樺厛浣跨敤甯︽湁-spring鐨勬枃浠跺悕浣滀负浣犵殑鏃ュ織閰嶇疆锛堝浣跨敤logback-spring.xml锛岃€屼笉鏄痩ogback.xml锛夛紝鍛藉悕涓簂ogback-spring.xml鐨勬棩蹇楅厤缃枃浠讹紝spring boot鍙互涓哄畠娣诲姞涓€浜泂pring boot鐗规湁鐨勯厤缃」锛堜笅闈細鎻愬埌锛夈€偮? 榛樿鐨勫懡鍚嶈鍒欙紝骞朵笖鏀惧湪聽src/main/resources聽涓嬮潰鍗冲彲锛?

瀛愯妭鐐逛竴锛?code><appender>娣诲姞鍣?/code>

appender鐢ㄦ潵鏍煎紡鍖栨棩蹇楄緭鍑鸿妭鐐癸紝鏈変咯涓睘鎬ame鍜宑lass锛宑lass鐢ㄦ潵鎸囧畾鍝杈撳嚭绛栫暐锛屽父鐢ㄥ氨鏄帶鍒跺彴杈撳嚭绛栫暐鍜屾枃浠惰緭鍑虹瓥鐣ャ€?
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<property name="log.path" value="d://logs/cmge-sdk-charge" />
	<property name="log.maxHistory" value="15" />
	<property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %yellow(%thread) %green(%logger) %msg%n"/>
	<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %logger %msg%n"/>
	<property name="logstash.url" value="127.0.0.1"/>
	<!--杈撳嚭鍒版帶鍒跺彴-->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.colorPattern}</pattern>
		</encoder>
	</appender>

	<!--杈撳嚭鍒版枃浠?->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<MaxHistory>${log.maxHistory}</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

	<!--寮€鍚痶cp鏍煎紡鐨刲ogstash浼犺緭锛岄€氳繃TCP鍗忚杩炴帴Logstash-->
	<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<destination>${logstash.url}:9601</destination>
		<encoder charset="GBK" class="net.logstash.logback.encoder.LogstashEncoder"/>
	</appender>

	<root level="debug">
		<appender-ref ref="console" />
	</root>

	<root level="info">
		<appender-ref ref="logstash" />
		<appender-ref ref="file_info" />
		<appender-ref ref="file_error" />
		<!--        <appender-ref ref="logstash" />-->
	</root>
</configuration>
           
<encoder>琛ㄧず瀵规棩蹇楄繘琛岀紪鐮侊細
  • %contextName锛氫笂涓嬫枃鍚嶇О
  • %d{"yyyy-MM-dd HH:mm:ss,SSS"}锛氭棩蹇楄緭鍑烘椂闂?/li>
  • %thread锛氳緭鍑烘棩蹇楃殑杩涚▼鍚嶅瓧锛岃繖鍦╓eb搴旂敤浠ュ強寮傛浠诲姟澶勭悊涓緢鏈夌敤
  • %-5level 鎴栬€吢?-5p锛氭棩蹇楃骇鍒紝骞朵笖浣跨敤5涓瓧绗﹂潬宸﹀榻?/li>
  • %logger{36}锛氭棩蹇楄緭鍑鸿€呯殑鍚嶅瓧锛堜粠鍙宠竟鏁帮紝闀垮害涓?6锛夛紝鐢变簬澶暱杩欓噷寮曠敤鐨劼?c{0}-%M
  • %c{0}锛氭棩蹇楄緭鍑鸿€呯殑鍚嶅瓧锛屼粠鍙宠竟鏁帮紝绗竴涓紙绫诲悕锛?/li>
  • %M锛氭柟娉曞悕
  • %msg 鎴栬€?m锛氭棩蹇楁秷鎭?/li>
  • %n锛氭崲琛岀聽

logstash-sample.conf閰嶇疆

Spring Boot(日志篇):Logback集成ELK,处理日志实例作用logback(Spring Boot 默认日志)在pom.xml加入相关依赖logback.xml日志配置logstash-sample.conf配置总结
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  stdin{}
  #file{
    #path=>'D:/logs/cmge-sdk-charge/info/info.2020-09-08.log'
  #}
  #寮€鍚痶cp妯″紡鐨勭洃鍚?  tcp {
    #杩欎釜闇€瑕侀厤缃垚鏈満IP锛屼笉鐒秎ogstash鏃犳硶鍚姩
    host => "127.0.0.1"
    #绔彛鍙?    port => 9601
    #灏嗘棩蹇椾互json鏍煎紡杈撳叆
    codec => json_lines
  }
}

output {
  elasticsearch {
    hosts => ["http://10.10.80.127:9200"]
    index => "test_index"
  }
  stdout { codec => json_lines }
}
           

鎬荤粨

鍒版涓烘缁堜簬浠嬬粛瀹屾棩蹇楁鏋朵簡锛屽钩鏃朵娇鐢ㄧ殑鏃跺€欐帹鑽愮敤鑷畾涔塴ogback-spring.xml鏉ラ厤缃紝浠g爜涓娇鐢ㄦ棩蹇椾篃寰堢畝鍗曪紝绫婚噷闈㈡坊鍔爌rivate final Logger logger = LoggerFactory.getLogger(Logger.class);鍗冲彲銆?

褰撶劧涔熷彲浠ヤ娇鐢╨ombok鏂瑰紡銆?

继续阅读