最近生产有个小项目出异常后,每次得找运维下载个日志,很麻烦。
因为项目的功能比较杂,啥业务都有,查某些异常又很不方便。
组员的建议:
1.日志采集工具 (又没资源)
2.第3方java工具 (维护多一个项目)
3.写shell脚本 (截取麻烦,比较菜,不会写)
因为快下班了, 后来想到个比较懒的方法,在全局异常里取前几行日志,推送出去,搞定。
@RestControllerAdvice
public class GlobalExceptionHandler {
private static Logger log = Logger.getLogger(GlobalExceptionHandler.class);
//查询前几行日志
@ExceptionHandler(value=Exception.class)
public RespBean exceptionHandler(HttpServletRequest request, Exception ex){
log.error("---Exception--- ERROR: {}", ex);
ThrowableInformation throwable = new ThrowableInformation(ex);
StringBuilder build = new StringBuilder();
String[] array = throwable.getThrowableStrRep();
for (int i = 0; i < array.length; i++) {
build.append(array[i]);
if(i == 12)
break;
}
this.sendMessage(build.toString());
return result;
}
//推送几个消息
private void sendMessage(String msg){
RestTemplate restTemplate =new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
String env = "生产";
String content = "{\"msgtype\":\"text\",\"text\":{\"content\":\" "+env+"+"+msg+"\"},\"at\":{\"atMobiles\":[\"xxx\"],\"isAtAll\":false}}";
HttpEntity<String> request = new HttpEntity<>(content, headers);
String url = "https://q";
ResponseEntity<String> postForEntity = restTemplate.postForEntity(url, request, String.class);
String body = postForEntity.getBody();
}