鐩綍
浣滅敤
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閰嶇疆
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csUnVtJGcGhFZwhnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1UTM5IDN0MTMxETOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
# 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鏂瑰紡銆?