引言
本文代码已提交至Github(版本号:
15880edfd7251ec4fc7950ff346056efe46f4272
),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop
前面的博客把ELK+Kafka的原理以及功能都实现了,有兴趣的同学可以参阅下:
- 《淘东电商项目(48) -ELK+Kafka分布式日志收集(原理篇)》
- 《淘东电商项目(49) -ELK+Kafka分布式日志收集(docker下搭建kafka)》
- 《淘东电商项目(50) -ELK+Kafka分布式日志收集(实现篇)》
本文在前面的基础上讲解全局异常捕获,并通过Kafka发送到ELK。
本文目录结构:
l____引言
l____ 1. 代码
l____ 2. 测试
1.代码
实现很简单,直接定义一个全局异常捕获类,直接在捕获方法里面发送错误日志到Kafka即可,代码如下:
/**
* description: 全局捕获异常
* create by: YangLinWei
* create time: 2020/4/29 5:20 下午
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@Autowired
private KafkaSender<JSONObject> kafkaSender;
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public JSONObject exceptionHandler(Exception e) {
// 1.封装异常日志信息
JSONObject errorJson = new JSONObject();
JSONObject logJson = new JSONObject();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
logJson.put("request_time", df.format(new Date()));
logJson.put("error_info", e);
errorJson.put("request_error", logJson);
kafkaSender.send(errorJson);
// 2. 返回错误信息
JSONObject result = new JSONObject();
result.put("code", 500);
result.put("msg", "系统错误");
return result;
}
}
在商品搜索服务模拟一个异常:
2.测试
启动ELK+Kafa环境,然后在浏览器请求http://localhost:8500/search?name=pg模拟抛出异常:
可以看到logstash控制台收集到错误日志:
在kibana也能查看到采集的错误日志:
本文完!