日志配置:
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() 就可以回滚事务