logback系统异常日志写入文件

控制台异常堆栈日志写文件

  先上问题。使用logback 的朋友会发现一个问题。自己分好日志类型,日志也会按级别输出相应的文件。前提是我们自己调用了info(),error()等日志输出方法。但是这样就存在一个问题就是非jdk检测异常,也就是RunTime异常是无法try..catch 后输出logger.error(e.getMessage())的,每次线上出异常查日志就只有通过容器的控制台日志进行查询,这样就会加大时间成本。并且在每次的try catch都要调error会相当麻烦。

之前是想着把控制台的输出直接写到文件,这个方向不对。因为我们是无法直接切入控制台对象的。直到发现了@ControllerAdvice 这个注解,从名字上可以看出大体意思是控制器增强。内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用。我们只需要添加一个类作全局异常处理。那么所有的异常都会通过这个方法返回前台,而我们的日志也就可以在这里植入了。

代码如下:
@ControllerAdvice
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ResponseBody
    @ExceptionHandler(Exception.class)
    public Object handleException(Exception e) {
        logger.error(ExceptionUtils.getFullStackTrace(e));  // 记录错误信息
        String msg = e.getMessage();
        if (msg == null || msg.equals("")) {
            msg = "服务器出错";
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("message", msg);
        return jsonObject;
    }
}

下面我们模拟一个runtime异常。通过postMan调用后台方法 1 / 0的操作,


同时我们看看生成的日志文件




时间和pid一一对应,生成日志。这样就可以方便的查看系统异常的堆栈日志了。

(logback日志配置不在这里细说)



评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值