springboot学习入门简易版六---springboot2.0整合全局捕获异常及log4j日志(12-13)
使用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)的更多相关文章
- springboot学习入门简易版五---springboot2.0整合jsp(11)
springboot对jsp支持不友好,内部tomcat对jsp不支持,需要使用外部tomcat,且必须打包为war包. 1 创建maven项目 注意:必须为war类型,否则找不到页面. 且不要把js ...
- springboot学习入门简易版九---springboot2.0整合多数据源mybatis mysql8+(22)
一个项目中配置多个数据源(链接不同库jdbc),无限大,具体多少根据内存大小 项目中多数据源如何划分:分包名(业务)或注解方式.分包名方式类似多个不同的jar,同业务需求放一个包中. 分包方式配置多数 ...
- springboot学习入门简易版三---springboot2.0启动方式
2.4使用@componentscan方式启动 2.4.1 @EnableAutoConfiguration 默认只扫描当前类 @EnableAutoConfiguration 默认只扫描当前类,如果 ...
- springboot学习入门简易版二---springboot2.0项目创建
2 springboot项目创建(5) 环境要求:jdk1.8+ 项目结构: 2.1创建maven工程 Group id :com.springbootdemo Artifact id: spring ...
- springboot学习入门简易版八---springboot2.0多环境配置、整合mybatis mysql8+(19-20)
2.11 SpringBoot多环境配置(19) application.properties中配置 Spring.profiles.active=prd 配置环境: Application-dev ...
- springboot学习入门简易版四---springboot2.0静态资源访问及整合freemarker视图层
2.4.4 SpringBoot静态资源访问(9) Springboot默认提供静态资源目录位置需放在classpath下,目录名需要符合如下规则 /static /public /resourc ...
- springboot学习入门简易版一---springboot2.0介绍
1.1为什么用springboot(2) 传统项目,整合ssm或ssh,配置文件,jar冲突,整合麻烦.Tomcat容器加载web.xml配置内容 springboot完全采用注解化(使用注解方式启动 ...
- springboot学习入门简易版七---springboot2.0使用@Async异步执行方法(17)
1启动类开启异步调用注解 @SpringBootApplication @EnableAsync //开启异步调用 public class StartApplication { 不开启则异步调用无效 ...
- SpringBoot2.0 整合 QuartJob ,实现定时器实时管理
一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...
随机推荐
- js页面 :函数名 is not defined
最初的写法如下 function GetDateStr(AddDayCount) { var dd = new Date(); dd.setDate(dd.getDate() + AddDayCoun ...
- elementUI-tree组件 懒加载
<el-tree ref="tree" :data="menu.treeData" :props="menu.defaultProps" ...
- FFmpeg av_seek_frame规律详解
本帖最后由 TangMonk 于 2016-7-27 10:26 编辑 1 av_seek_frame对视频进行跳转规律 1.1 flags参数 #define AVSEEK_FLAG_BACKWAR ...
- ISO/IEC 9899:2011 条款1——范围
1. 范围 1.本国际标准指定了C编程语言的形式并建立了对用C编程语言进行编写程序的诠释.[注:国际标准的设计是用于提升在多种数据处理系统中的C程序的可移植性.其目的在于能够被实现者与程序员所使用.] ...
- win10 启动后会自动恢复上次关机前的应用
转载:https://www.v2ex.com/t/425101
- Word模板生成PDF文件目录出现“错误!未定义书签!”的解决办法
通过程序读取Word文档模板生成PDF时,所有目录的页码全部变为“错误!未定义书签!”,后来经过仔细研究,发现是“域”的问题. 解决办法:全选(Crtl+A),按下Crtl+F11,再打印或者另存为P ...
- ChrW函数
ChrW 函数返回包含 Unicode 的 String,若在不支持 Unicode 的平台上,则其功能与 Chr 函数相同.相反的函数是 ASCW() 在access当中用到了
- 图像处理软件ImageJ
ImageJ是一个基于java的公共的图像处理软件,它是由National Institutes of Health开发的.可运行于Microsoft Windows,Mac OS,Mac OS X, ...
- css选择器测试2-用ul和li简单排版
之前的博文:测试了一些css样式的优先级,都是比较常见的选择器 ,这里测试一些其他一些选择方式. *:通配符,所有页面的元素都走这个.设置多个class:一个标签里不能有两个class,如果想要设置多 ...
- 西门子PLC1200内使用SCL实现简化版PID算法
西门子自带的PID效果很好,但是会比较吃性能,使用次数有限,很多地方需要PID但不需要这么精准的PID,所以网上找个简单的算法自己调用. 新建数据类型 前三个就是PID三个参数 新建FC块: #PID ...