spring cloud sleuth logstashTcpSocketAppender使用
应用:直接将日志输出到logstash中,再由logstash传送到elasticsearch
******************************
示例
*************************
logback-spring.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<springProperty scope="context" name="springApplicationName" source="spring.application.name"/>
<property name="log.path" value="/usr/local"/>
<property name="console.pattern" value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="logstash.pattern" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console.pattern}</pattern>
</encoder>
</appender>
<appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/${springApplicationName}.%d{yyyy-MM-dd}.json</fileNamePattern>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>UTC</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springApplicationName:-}",
"traceId": "%X{X-B3-TraceId:-}",
"spanId": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"msg": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<appender name="tcp" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.57.4:4560</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<keepAliveDuration>5 minutes</keepAliveDuration>
</appender>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="logstash"/>
<appender-ref ref="tcp"/>
</root>
</configuration>
*************************
controller 层
HelloController
@RestController
public class HelloController {
private Logger logger= LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/hello")
public String hello(){
for(int i=0;i<10;i++){
logger.info("hello controller: {}","hello world "+i);
}
return "success";
}
}
*************************
logstash
配置文件
input {
tcp {
port => 4560
codec => json_lines
}
} //从tcp读取内容
output {
stdout { codec => json }
} //输出到控制台
创建logstash容器
docker run -it -d --net fixed3 --ip 192.168.57.4 \
-v /usr/elasticsearch/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
--name logstash logstash:7.6.1
************************
使用测试
调用/hello接口,logstash控制台输出
说明:控制台以json格式输出数据