使用Aop实现

1创建异常请求

在原有项目基础上,jspController中创建一个可能发生异常的请求:

/**

* 全局捕获异常测试

* @param i

* @return

*/

@RequestMapping("/testGloableException")

@ResponseBody

public String testGloableException(int i) {

int j=2/i;

return "test";

}

2创建全局捕获异常处理类

/**

* 全局捕获异常

* @author admin

*

*/

@ControllerAdvice(basePackages="com.springbootjsp")

public class GloableExceptionHandler {

/**

* 使用全局捕获异常不建议将异常吃掉

* @return

*/

@ExceptionHandler(RuntimeException.class)

@ResponseBody //返回json格式

public Map<String,Object> errorResult(){

Map<String,Object> map=new HashMap<>();

map.put("errorCode", "error_500");

map.put("errorMsg", "全局捕获异常");

return map;

}

}

3 启动项目,并访问:

http://localhost:8080/testGloableException?i=0

页面返回:{"errorCode":"error_500","errorMsg":"全局捕获异常"}

2.8 SpringBoot整合log4j日志记录(13)

1引入log4j包

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-log4j2</artifactId>

</dependency>

2 log4j配置

resources下创建log4j.properties文件

 

# LOG4J\u914D\u7F6E

log4j.rootCategory=INFO, stdout, file

# \u63A7\u5236\u53F0\u8F93\u51FA

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\u65E5\u5FD7\u8F93\u51FA\u5230\u6587\u4EF6

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

log4j.appender.file.file=/logsdata/logs/springboot-log4j-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

# \u6309\u4E0D\u540Cpackage\u8FDB\u884C\u8F93\u51FA

# com.micai\u5305\u4E0B\u7684\u65E5\u5FD7\u914D\u7F6E

log4j.category.com.micai=DEBUG, didifile

# com.micai\u4E0B\u7684\u65E5\u5FD7\u8F93\u51FA

log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.didifile.file=/logsdata/logs/springboot-log4j-my.log

log4j.appender.didifile.DatePattern='.'yyyy-MM-dd

log4j.appender.didifile.layout=org.apache.log4j.PatternLayout

log4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

# ERROR\u7EA7\u522B\u8F93\u51FA\u5230\u7279\u5B9A\u7684\u65E5\u5FD7\u6587\u4EF6\u4E2D

log4j.logger.error=errorfile

# error\u65E5\u5FD7\u8F93\u51FA

log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.errorfile.file=/logsdata/logs/springboot-log4j-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

 

3 使用

@Controller

public class JspController {

public static final Logger log=LoggerFactory.getLogger(JspController.class);

 

@RequestMapping("/testGloableException")

@ResponseBody

public String testGloableException(int i) {

log.info("testGloableException====");

int j=2/i;

return "test";

}

2.9 SpringBoot使用aop统一处理web请求日志(14)

1pom配置

<!-- spring-boot-starter-parent 整合第三方常用框架依赖信息(包含各种依赖信息) -->

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.0.RELEASE</version>

</parent>

<!-- spring-boot-starter-web springboot整合springmvc web

实现原理:maven依赖继承关系,相当于把第三方常用maven依赖信息,在parent项目中已封装

-->

<dependencies>

<!-- 根据需要选择parent中封装的第三方框架 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<!-- 不需要写版本号,因为在parent中已封装好版本号 -->

</dependency>

<!-- log4j2 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-log4j2</artifactId>

</dependency>

<!-- aop -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

</dependencies>

2创建切面

WebLogAspect类

 

@Aspect

@Component

public class WebLogAspect {

private final static Logger logger=LoggerFactory.getLogger(WebLogAspect.class);

@Pointcut("execution(public * com.springboot2..*.*(..))")

public void weblog() {

}

@Before("weblog()")

public void doBefore(JoinPoint joinPoint) {

//接收到请求,记录请求内容

ServletRequestAttributes attributes=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request=attributes.getRequest();

//记录下请求内容

logger.info("URL:"+ request.getRequestURI().toLowerCase());

logger.info("HTTP_METHOD:"+request.getMethod());

logger.info("IP:"+request.getRemoteAddr());

Enumeration<String> enu=request.getParameterNames();

while (enu.hasMoreElements()) {

String name=(String)enu.nextElement();

logger.info("name:{},value:{}",name,request.getParameter(name));

}

}

@AfterReturning(returning="obj" ,pointcut="weblog()")

public void deAfter(Object obj) {

logger.info("Response:"+obj);

}

项目结构:

3创建controller

 

@RestController

public class SecondController {

@RequestMapping("/second")

public String second() {

return "second test";

}

}

4 访问http://localhost:8080/second

可看到后台日志输出

5说明:

Aop表达式

https://blog.csdn.net/somilong/article/details/74568223

git代码:https://github.com/cslj2013/springboot2.0_log_aop.git

springboot学习入门简易版六---springboot2.0整合全局捕获异常及log4j日志(12-13)的更多相关文章

  1. springboot学习入门简易版五---springboot2.0整合jsp(11)

    springboot对jsp支持不友好,内部tomcat对jsp不支持,需要使用外部tomcat,且必须打包为war包. 1 创建maven项目 注意:必须为war类型,否则找不到页面. 且不要把js ...

  2. springboot学习入门简易版九---springboot2.0整合多数据源mybatis mysql8+(22)

    一个项目中配置多个数据源(链接不同库jdbc),无限大,具体多少根据内存大小 项目中多数据源如何划分:分包名(业务)或注解方式.分包名方式类似多个不同的jar,同业务需求放一个包中. 分包方式配置多数 ...

  3. springboot学习入门简易版三---springboot2.0启动方式

    2.4使用@componentscan方式启动 2.4.1 @EnableAutoConfiguration 默认只扫描当前类 @EnableAutoConfiguration 默认只扫描当前类,如果 ...

  4. springboot学习入门简易版二---springboot2.0项目创建

    2 springboot项目创建(5) 环境要求:jdk1.8+ 项目结构: 2.1创建maven工程 Group id :com.springbootdemo Artifact id: spring ...

  5. springboot学习入门简易版八---springboot2.0多环境配置、整合mybatis mysql8+(19-20)

    2.11 SpringBoot多环境配置(19)  application.properties中配置 Spring.profiles.active=prd 配置环境: Application-dev ...

  6. springboot学习入门简易版四---springboot2.0静态资源访问及整合freemarker视图层

    2.4.4 SpringBoot静态资源访问(9) Springboot默认提供静态资源目录位置需放在classpath下,目录名需要符合如下规则 /static  /public  /resourc ...

  7. springboot学习入门简易版一---springboot2.0介绍

    1.1为什么用springboot(2) 传统项目,整合ssm或ssh,配置文件,jar冲突,整合麻烦.Tomcat容器加载web.xml配置内容 springboot完全采用注解化(使用注解方式启动 ...

  8. springboot学习入门简易版七---springboot2.0使用@Async异步执行方法(17)

    1启动类开启异步调用注解 @SpringBootApplication @EnableAsync //开启异步调用 public class StartApplication { 不开启则异步调用无效 ...

  9. SpringBoot2.0 整合 QuartJob ,实现定时器实时管理

    一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...

随机推荐

  1. 【转】HTML meta标签总结与属性使用介绍

    HTML meta标签总结与属性使用介绍 转载处写的已经超级好了,强烈推荐. 转自:https://segmentfault.com/a/1190000004279791 本人就不再赘述.拿来主义!供 ...

  2. 011-数据结构-树形结构-B+树[mysql应用]、B*树

    一.B+树概述 B+树是B树的变种,有着比B树更高的查询效率. 一棵 B+ 树需要满足以下条件: 节点的子树数和关键字数相同(B 树是关键字数比子树数少一) 节点的关键字表示的是子树中的最大数,在子树 ...

  3. 不使用BASE64Encoder、BASE64Decoder

    BASE64Encoder/BASE64Decoder类在sun.misc包下,是sun公司的内部方法,后期有删除的潜在可能,建议使用apache commons.codec下的Base64替代. m ...

  4. Linux共享文件夹映射到Windows磁盘

    摘自:https://www.jianshu.com/p/4a06121450e5 1.1方案背景 本方案就是在解决磁盘不足的问题而产生的,利用映射盘的原理将Linux共享文件夹映射到Windows磁 ...

  5. 钉钉服务端api接口使用

    原文链接:http://www.cnblogs.com/xiaosongJiang/p/9991573.html 第一步:注册钉钉企业账号 打开链接:https://oa.dingtalk.com/# ...

  6. WebAPI.请求(Request)的参数(Parameter)里包含特殊字符(#等)的正确处理方式 从客户端xx中检测到有潜在危险的Request.Form值

    事故现场 报错"从客户端 中检测到有潜在危险的Request.Form值" //后台代码 namespace Test { [RoutePrefix("TestClass ...

  7. [LeetCode] 265. Paint House II 粉刷房子

    There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...

  8. [LeetCode] 544. Output Contest Matches 输出比赛匹配对

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  9. Oracle:时间字段模糊查询

    需要查询某一天的数据,但是库里面存的是下图date类型 将Oracle中时间字段转化成字符串,然后进行字符串模糊查询 select * from CAINIAO_MONITOR_MSG t WHERE ...

  10. linux下RAR和ZIP安装和使用

    服务器没装rar,对于上传是压缩的文件来说,是个很大的问题. 源码安装rar: 1. 下载: wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar ...