【第三十二章】 elk(3)- broker架构 + 引入logback
实际中最好用的日志框架是logback,我们现在会直接使用logback通过tcp协议向logstash-shipper输入日志数据。在上一节的基础上修改!!!
一、代码
1、pom.xml
1 <!-- logstash-logback --> 2 <dependency> 3 <groupId>net.logstash.logback</groupId> 4 <artifactId>logstash-logback-encoder</artifactId> 5 <version>4.6</version> 6 </dependency>
2、application.properties
1 #set logstash shipper host 2 logstash.host=127.0.0.1 3 #set logstash shipper port 4 logstash.port=4560 5 logstash.level=info
3、LogstashProperties.java
package com.xxx.secondboot.logstash; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Getter; import lombok.Setter; @Component @ConfigurationProperties(prefix = "logstash") @Getter @Setter public class LogstashProperties { private String host; private int port; private String level; }
4、LogstashConfig.java
package com.xxx.secondboot.logstash; import java.net.InetSocketAddress; import javax.annotation.PostConstruct; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import net.logstash.logback.appender.LogstashTcpSocketAppender; import net.logstash.logback.encoder.LogstashEncoder; /** * 该类是可以配置成xml配置文件的,但是那样的话,就不能由客户端指定参数了 */ @Component public class LogstashConfig { @Autowired private LogstashProperties logstashProperties; @PostConstruct public void init() { Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); LogstashTcpSocketAppender appender = new LogstashTcpSocketAppender(); appender.setName("stash"); appender.addDestinations(new InetSocketAddress(logstashProperties.getHost(), logstashProperties.getPort())); LogstashEncoder encoder = new LogstashEncoder(); encoder.setCustomFields("{ \"service\":\"" + "myboot2" + "\"}");//服务名会在日志中显示(可以方便的知道该日志是哪个服务的) encoder.start(); appender.setEncoder(encoder); appender.setContext(rootLogger.getLoggerContext()); appender.start(); rootLogger.addAppender(appender); rootLogger.setLevel(Level.toLevel(logstashProperties.getLevel())); } }
注意:
- init()方法在LogstashConfig bean构建之后执行,之后的日志信息都会写入到LogstashTcpSocketAppender中去
- 2、3、4其实也可以没有,直接使用xml配置即可(参考:https://github.com/logstash/logstash-logback-encoder/tree/logstash-logback-encoder-4.7),但是这样的话,就无法有我们自己指定logstash参数了,或者需要在xml中指定(这里的配置不在consul中配置),而配在application.properties中(实际上就是配在了consul中)
5、AdviceController.java
private static final Logger LOGGER = LoggerFactory.getLogger(AdviceController.class); @RequestMapping(value = "/testLog", method = RequestMethod.GET) public String testLog() { LOGGER.info("test info"); LOGGER.debug("test debug"); LOGGER.error("test error"); LOGGER.warn("test warn"); return "test logstash-logback"; }
二、测试
在上一节的基础上修改logstash-shipper的配置文件:(输入为tcp,配置参考:https://github.com/logstash/logstash-logback-encoder/tree/logstash-logback-encoder-4.7)
input { tcp { mode => "server" host => "127.0.0.1" port => 4560 codec => "json_lines" } } filter { } output { redis{ data_type => "list" host => ["127.0.0.1:6379"] key => "microservice:logstash:redis" } }
之后运行启动程序,这时候kibana就会打印出启动日志了,在日志中有servicename的体现,之后访问swagger,我们会发现3条不同级别的日志都进入kibana进行展示了。
【第三十二章】 elk(3)- broker架构 + 引入logback的更多相关文章
- 第三十二章 elk(3)- broker架构 + 引入logback
实际中最好用的日志框架是logback,我们现在会直接使用logback通过tcp协议向logstash-shipper输入日志数据.在上一节的基础上修改!!! 一.代码 1.pom.xml < ...
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java第三十二章:增强for循环Foreach语法
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 第三十二章、使用splitDockWidget和tabifyDockWidget嵌套布局QDockWidget的PyQt人机对话案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在第<第三十一章.containers容器类部件QDo ...
- SpringBoot | 第三十二章:事件的发布和监听
前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...
- 【WPF学习】第三十二章 执行命令
前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令 ...
- 第三十二章 Linux常规练习题(一)
一.练习题一 1.超级用户(管理员用户)提示符是____,普通用户提示符是____.2.linux关机重启的命令有哪些 ?3.bash是什么?4.bash特性, 常见的bash特性有哪些?5.网卡的配 ...
- 《FPGA全程进阶---实战演练》第三十二章 Signal Tap II 应用实例
还有几天就要交文章终稿了,三年的研究生生活也快要结束了,时间飞快,岁月如梭,但学习技术的热情仍然不能松懈,不懂的东西太多,需要实时保持奋斗!!过些天会继续更新<FPGA全程进阶---实战演练&g ...
随机推荐
- 我读过的最好的epoll讲解(转)
原文:http://zhihu.com/question/20122137/answer/14049112 作者:蓝形参来源:知乎 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等 ...
- IO流(9)复制指定文件夹下指定文件到目的文件夹,并改名
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import ja ...
- SQL SERVER 聚集索引 非聚集索引 区别
转自http://blog.csdn.net/single_wolf_wolf/article/details/52915862 一.理解索引的结构 索引在数据库中的作用类似于目录在书籍中的作用,用来 ...
- 9 jmeter之检查点
jmeter有类似loadrunner检查点的功能,就是断言中的响应断言. 1.响应断言(对返回文字结果进行相应的匹配)右击请求-->添加-->断言-->响应断言-->添加“要 ...
- 【剑指offer】重建二叉树
一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- 智能指针 - 现代C++新特性总结
C++98中的智能指针通过一个模板类auto_ptr来实现,new操作符返回的指针可以交由它来管理,程序员不用再显式的调用delete,这在一定程度上避免了堆内存忘记释放的问题:不过auto_ptr有 ...
- Git简单入门教程
1.下载Git,360的软件管家里搜 2.安装Git,下载好之后安装到指定路径下 安装方法有多个复选框的把第一个也选上,其他默认直接next,最后一步什么都不选 3.配置用户信息:(右键-->g ...
- R中双表操作学习[转载]
转自:https://www.jianshu.com/p/a7af4f6e50c3 1.原始数据 以上是原有的一个,再生成一个新的: > gene_exp_tidy2 <- data.fr ...
- PAT 1030 Travel Plan[图论][难]
1030 Travel Plan (30)(30 分) A traveler's map gives the distances between cities along the highways, ...
- ajax post 数组
ajax post 传递数组参数后台接收的为null,需要将其连接为字符串后传递 var url = "@Url.Action("CheckOutProduct", &q ...