温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springmvc实现输入输出信息打印日志中

发布时间:2021-06-29 09:25:01 来源:亿速云 阅读:272 作者:chen 栏目:大数据

本篇内容主要讲解“springmvc实现输入输出信息打印日志中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springmvc实现输入输出信息打印日志中”吧!

前言

同事在所有controller方法里加入了输入参数的log输出,输出数据的log输出或者使用aop的方式。真的很烦,鸟菜啊给大家一个简单的方式。

先看错误的方式

手动添加log打印方式
@Slf4j
@RestController
public class UserController{

	@RequestMapping("getUserInfo")
	public UserInfo getUserInfo(Long userId ){
		log.info("------------->查询getUserInfo入参{}", id);
		xxxxxxxx
		log.info("------------->查询getUserInfo输出{}", xxx);
	}
	@RequestMapping("newGetUserInfo")
	public UserInfo getUserInfo(Long userId , Long appId){
	    log.info("------------->查询getUserInfo入参id: {} , appId:{}", id, appId);
		xxxxxxxx
		log.info("------------->查询getUserInfo输出{}", xxxx);
	}
}
问题
  1. 每个类都需要加入@Slf4j注解,问题不大。如果不需要打印,那么可以不要,要还有一个报警,真烦

  2. 每个方法声明下与return之前都要写输入输出的代码,这个工作量也不小

  3. 多个入参,打印非常麻烦,添加一个入参的时候需要修改,工作量大,容易出错

  4. 输入输出的字符串里面必须加入方法名,这个工作量也不小。在你复制方法的时候也需要修改,挺烦。添加方法名时容易出错,修改时忘记修改。容易出错

  5. 日志级别不容易控制,必须是info级别,否则会打印很多其他debug的日志,因为是info级别,当想关闭输入输出的时候,缺因为是还有大量关键信息是通过info级别打印到日志里面,所以不能关闭。

  6. 如果是使用debug级别打印输出输出,当controller的目录不一样时,需要在日志文件的配置中,controller的日志级别为debug。容易忘记配置,出事,线上一般是关闭的。

总结

工作量大,代码不优雅(难看死了),日志信息与配置容易出错,配置不好管理

aop实现

百度一下随便找一个spring aop实现日志输出的,麻烦大家点击下Spring AOP实现统一日志输出。是在不想万恶的重复造轮子

问题
  1. 需要基于Spring AOP实现统一日志输出,而且非常健壮,没有问题。而且非常健壮,没有问题。而且非常健壮,没有问题。

  2. 需要启动Spring AOP实现统一日志输出

  3. 需要配置aop的切面,如果controller目录不一样,需求添加与修改切面点,容易出错

  4. 不基于jar依赖的话,需要把Spring AOP实现统一日志输出的代码每个项目复制一份,超级麻烦,容易出错。

  5. 当你的Spring AOP实现统一日志输出,修改得时候,需要把所有项目jar的依赖修改,如果是复制代码的方式,那更加麻烦

  6. 如果是jar依赖,需要多一个依赖,作为管理洁癖者十分不好。如果是通过代码的方式,可能不需要修改了代码出问题,项目目录里面会出现一个aop目录,鸟菜啊会烦死去,业务代码里面。只有那些业务目录,不应该出现功能目录。而且尽量保证目录的简单

总结

管理非常麻烦,容易出错,需要一定功底的程序员维护,成本大,代价大。

鸟菜啊的解决方案

第一步引入依赖

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-access</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
		</dependency>

第二步配置输入输出

<logger name="org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" level="trace" />

第三步看效果

2019-10-21 12:02:18.640 [http-nio-12140-exec-2] TRACEo.s.w.s.m.m.a.ServletInvocableHandlerMethod - Invoking 'com.xxx.UserController.getUserInfo' with arguments [1]

2019-10-21 12:02:18.920 [http-nio-12140-exec-2] TRACEo.s.w.s.m.m.a.ServletInvocableHandlerMethod - Method [com.xxx.UserController.getUserInfo] returned [xxxx]
缺点
  1. 打印的数据有点长

  2. 没有办法把多个log输出合成一个

  3. 要么一起关闭,一起打开,没有办法灵活下

优点
  1. 优雅

  2. 简单

  3. 无侵入

到此,相信大家对“springmvc实现输入输出信息打印日志中”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI