spring boot下统一异常处理+log4j日志配置

日志配置:

    pom文件导入:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
   </exclusions>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j</artifactId>
   <version>1.3.8.RELEASE</version>
</dependency>

    application.yml 配置文件:

logging:
  level:
    com:
      weixin: DEBUG

    log4j.properties 配置文件:

# LOG4J配置
log4j.rootCategory=INFO, stdout, file, errorfile
log4j.category.com.weixin=${logging.level.com.weixin}, weixin
log4j.logger.error=errorfile

# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# root日志输出
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=../logs/all.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# error日志输出
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.file=../logs/error.log
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# com.weixin下的日志输出
log4j.appender.weixin=org.apache.log4j.DailyRollingFileAppender
log4j.appender.weixin.file=../logs/weixin.log
log4j.appender.weixin.DatePattern='.'yyyy-MM-dd
log4j.appender.weixin.layout=org.apache.log4j.PatternLayout
log4j.appender.weixin.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
log4j.logger.com.weixin.dao=DEBUG

统一异常处理:

Contoller :

@GetMapping(value = "/test")
public Result test() throws Exception{
    String str = "sdf";
    Integer.parseInt(str);
    return ResultUtil.requestSuccess(null);
}

@GetMapping(value = "/test1")
public Result test1(String userid) throws Exception{
    //这里调用sql语句,如用户不存在
    if(!userid.equals("zs")){
        throw new MyException("用户不存在","01");
    }
    return ResultUtil.requestSuccess(null);
}

自定义异常处理类:

/**
 * Created by Administrator on 2018/5/14.
 * 自定义异常:
 *      1.用途(场景):
 *          1.如在程序中查询某某个用户不存在,按2(流程)操作
 *      2.流程:
 *          1.在程序中使用 thros new MyException(参数...);
 *          2.在controller中使用 throws Exception抛出异常
 *          3.抛出异常后 异常统一处理类进行处理
 */
public class MyException extends RuntimeException{

    private String code;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 带异常消息的构造
     *
     * @param message
     *            信息描述
     */
    public MyException(String message)
    {
        super(message);
    }

    /**
     * 带异常消息何编号的构造
     *
     * @param message
     *            信息描述
     * @param code
     *            编号
     */
    public MyException(String message,String code)
    {
        super(message);
        this.code = code;
    }

统一异常处理类:

import com.weixin.pojo.Result;
import com.weixin.util.ResultUtil;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by Administrator on 2018/5/14.
 * 统一处理异常
 *      在controller层 throws Exception
 */
@ControllerAdvice
public class ExceptionHandle {

    private final Logger logger = Logger.getLogger(ExceptionHandle.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result defaultErrorHandler(HttpServletRequest req, Exception e) {
        if(e instanceof MyException){
            MyException myException = (MyException)e;
            logger.info(myException.getMessage());
            return ResultUtil.requestFaild(myException.getMessage(),myException.getCode());
        }
        logger.error(e.getMessage()+"(异常)",e);  //这里必须是logger.error(str1,str2),需要在
        e.printStackTrace();
        return ResultUtil.requestFaild(e.getMessage());
    }
}

注意:

   spring默认程序出现RuntimeException时在会进行事务回滚,这个MyException(自定义异常类,此类是继承RuntimeException的)可以用来控制事务

    如:

       插入A表操作,插入B表操作 , 修改C表操作 , 而在修改C表时受影响行数为0行,调用 throw new MyException() 就可以回滚事务


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值