Springboot(二)自定义日志与异常

日志设置

  • 日志:“谁在何时何地做了何事”—定义日志对象。
  • “何事”:定义用户的动作,“有各种事”。
  • 提供创建日志对象的工具类。
//日志对象定义

/**
 * 日志信息对象
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LogObject {

    /**
     * 用户id
     */
    private Long UserId;

    /**
     * 动作类型
     */
    private String actionType;

    /**
     * 当前时间
     */
    private Long timestamp;

    /**
     * 客户端ip地址
     */
    private String IP;

    /**
     * 日志信息
     */
    private Object info=null;

}

/**
 * 定义用户动作类型
 */
public class LogActionType {

    public class ActionType{

        /**
         * 用户领取优惠券
         */
        public static final String ASSIGNED_TEMPLATE="assigned_template";

        /**
         * 用户消费优惠券
         */
        public static final String CONSUME_TEMPLATE="consume_template";

        /**
         *用户查看优惠券信息
         */
        public static final String PASSTEMPLATE_INFO="passtemplate_info";

        /**
         * 用户查看已使用的优惠券信息
         */
        public static final String USED_TEMPLATE_INFO="used_template_info";

        /**
         * 用户查看未使用的优惠券信息
         */
        public static final String UNUSED_TEMPLATE_INFO="UNUSED_TEMPLATE_INFO";

        /**
         * 用户创建评论
         */
        public static final String CREATE_FEEDBACK="CreateFeedback";

        /**
         * 用户查看评论
         */
        public static final String VIEW_FEEDBACK="viewFeedback";

        /**
         * 用户删除评论等
         */


    }

/**
 * 日志生成器
 */
@Slf4j//使用日志打印
public class LogGenenrator {

    /**
     * 生成日志
     * @param request 请求信息 获取IP地址
     * @param userId 用户id
     * @param action 动作类型
     * @param info 日志信息
     */
    public static void generateLog(HttpServletRequest request,Long userId,String action,Object info){
        log.info(
                JSON.toJSONString(
                        new LogObject(userId,action,System.currentTimeMillis(),request.getRemoteAddr(),info)
                )
        );
    }


}



异常定义与处理

  • Java异常类基础知识
  • 程序中一般对运行时异常(RuntimeException)进行捕获处理。
  • 自定义异常类:继承RuntimeException类,提供构造方法,通过调用父类的构造方法创建实例super(message)
public class OrderException extends RuntimeException {

    /**
     * 异常码
     */
    @Getter
    private Integer code;

    public OrderException(OrderExceptionEnum orderExceptionEnum){
        super(orderExceptionEnum.getMessage());
        this.code=orderExceptionEnum.getCode();
    }

    public OrderException(Integer code,String message){
        super(message);
        this.code=code;
    }

}

"定义异常类枚举"

/**
 * 订单异常枚举类定义
 */
public enum OrderExceptionEnum {

    PRODUCT_NOT_EXIST(1,"商品不存在"),
    PRODUCT_SHORTAGE(2,"库存不足"),

    PRODUCT_ORDER_NOT_EXIST(3,"订单不存在"),
    PRODUCT_ORDERITEM_NOT_EXIST(4,"订单项不存在"),
    ORDER_CANCLE_WRONG(5,"订单已完结或已取消"),
    ORDER_CANCLE_FAIL(6,"订单取消失败"),
    ORDER_STATUS_WRONG(7,"订单状态错误"),
    ORDER_FINISH_FAIL(8,"订单完结失败"),
    ORDER_PAY_FAIL(9,"订单支付失败"),
    PAY_STATUS_WRONG(10,"支付状态不正确"),
    ORDER_PARAM_WRONG(11,"订单参数错误")
    ;
    @Getter
    private Integer code;
    @Getter
    private String message;

    OrderExceptionEnum(Integer code,String message){
        this.code=code;
        this.message=message;
    }

}
  • 通过ControllerAdvice处理异常。
@ControllerAdvice
public class HandlerException {

    @ExceptionHandler(SellerException.class)//需要捕获的异常类
    public String handleLoginException(Exception e){
        if(e instanceof SellerException){
            e.printStackTrace();
            return "login";
        }
        return "";
    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值