java注解日志记录到数据库
1. pom添加依赖包
<!--添加aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> 2.配置文件application.yml添加
spring:
aop:
auto: true
3 创建实体类
package com.spring4all.entity; import java.io.Serializable;
import java.util.Date; /**
* @author shafei
* @version 1.0
* @date 10:28 2019/9/7
* @fun
*/
public class SysLogDO implements Serializable {
private Long id; private String username; //用户名 private String operation; //操作 private String method; //方法名 private String params; //参数 private String ip; //ip地址 private Date createDate; //操作时间 public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getOperation() {
return operation;
} public void setOperation(String operation) {
this.operation = operation;
} public String getMethod() {
return method;
} public void setMethod(String method) {
this.method = method;
} public String getParams() {
return params;
} public void setParams(String params) {
this.params = params;
} public String getIp() {
return ip;
} public void setIp(String ip) {
this.ip = ip;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
4.使用spring 的 aop 技术切到自定义注解上,所以先创建一个自定义注解类
package com.spring4all.config.intercepors; import java.lang.annotation.*;
/**
* @author shafei
* @version 1.0
* @date 10:06 2019/9/7
*/
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行
@Documented //生成文档
public @interface MyLog {
String value() default "";
}
5.AOP实现:
package com.spring4all.config; import com.alibaba.fastjson.JSON;
import com.spring4all.config.intercepors.MyLog;
import com.spring4all.entity.SysLogDO;
import com.spring4all.service.SysLogService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;
/**
* @author shafei
* @version 1.0
* @date 10:08 2019/9/7
* fun:
*/
@Aspect
@Component
public class SysLogAspect { @Autowired
private SysLogService sysLogService; //定义切点 @Pointcut
//在注解的位置切入代码
@Pointcut("@annotation( com.spring4all.config.intercepors.MyLog)")
public void logPoinCut() {
} //切面 配置通知
@AfterReturning("logPoinCut()")
public void saveSysLog(JoinPoint joinPoint) {
System.out.println("切面。。。。。");
//保存日志
SysLogDO sysLog = new SysLogDO(); //从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取切入点所在的方法
Method method = signature.getMethod(); //获取操作
MyLog myLog = method.getAnnotation(MyLog.class);
if (myLog != null) {
String value = myLog.value();
sysLog.setOperation(value);//保存获取的操作
} //获取请求的类名
String className = joinPoint.getTarget().getClass().getName();
//获取请求的方法名
String methodName = method.getName();
sysLog.setMethod(className + "." + methodName); //请求的参数
Object[] args = joinPoint.getArgs();
//将参数所在的数组转换成json
String params = JSON.toJSONString(args);
sysLog.setParams(params); sysLog.setCreateDate(new Date());
//获取用户名
sysLog.setUsername("shafei");
//获取用户ip地址
// HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
sysLog.setIp("192.168.3.11"); //调用service保存SysLog实体类到数据库
// sysLogService.save(sysLog);
System.out.println("将日志记录到数据库");
}
}
6.接下来就可以在需要监控的方法上添加 aop的自定义注解
格式为 @+自定义注解的类名
@Controller
@RequestMapping("/test")
public class UserController { @MyLog(value = "测试一下")
@GetMapping("/test")
@ResponseBody
public String test(){
return "test";
} }
说明:
记录日志的服务层接口SysLogService需要另外写,这个应该都会写;
参考https://www.jianshu.com/p/d0bbdf1974bd
java注解日志记录到数据库的更多相关文章
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- 也用 Log4Net 之将日志记录到数据库的配置 (一)
也用 Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需 ...
- Log4Net 之将日志记录到数据库的后台实现 (二)
原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
- Log4Net 之将日志记录到数据库的配置 (一)
原文:Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要 ...
- log4j教程 12、日志记录到数据库
log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...
- OneAPM大讲堂 | Java 异常日志记录最佳实践
[编者按]本文作者是 Casey Dunham.Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全问题而闻名.本文系国内 ITOM 管理平台 OneAPM 工程师编译 ...
- log4j 将日志记录到数据库
需要以下jar包: ---log4j commons-loggin-1.1.1.jar log4j-1.2.16.jar ---mysql mysql-connector-java-5.1.15-bi ...
- log4j日志记录到数据库
log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...
- 初学java注解编程 记录错误及解决办法
1 :在form表单提交到controller层时 利用hbim的封装的访问数据库 form表单中属性要加上method方法 不然不成功. 2 :在运行eclipse时 有时粘贴个数据或者删除个字段老 ...
随机推荐
- new Handler()和new Handler(Looper.getMainLooper())的区别是什么?
new Handler()和new Handler(Looper.getMainLooper())的区别是什么? 一.Handler的一些知识,new Handler()和new Handle ...
- 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)
本人西电硕士,根据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇如下,吐血奉献给各位学弟学妹,公司比较全,你想去的公司不在这里面,基本上是无名小公司了:无名小公司有时也很给力哦以下绝对是各大公 ...
- React之概述(待续)
原文链接 MDN上有关JavaScript的内容 箭头函数, 类, 模板字符串, let, const Babel REPL
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_05-用户认证-认证服务查询数据库-调用查询用户接口
用户认证服务调用根据账号查询用户的信息 怎么远程调用呢?要创建一个客户端,这个客户端其实就是一个接口 标明服务的名称是ucenter服务 这是ucenter服务里面 复制过来接口的定义,GetMapp ...
- Transaction check error:
Transaction check error: file /etc/my.cnf from install of MariaDB-common-10.3.16-1.el7.centos.x86_6 ...
- hdfs中删除文件、文件夹、抓取内容
删除文件 bin/hdfs dfs -rm output2/* 删除文件夹 bin/hdfs dfs -rm -r output2 抓取内容 bin/hdfs dfs -cat /us ...
- migrate设置
migrate配置 进入项目manage所在的目录中执行如下命令,否则会报错:no such table: django_session 进入cmd 输入盘符比如:E: 切换目录 cd E:\prog ...
- Docker storage driver(十四)
目录 一.storage driver 作用 1.Images and layers 2.Container and layers Copy-on-Write 3.Data volumes and t ...
- Flutter JSON解析与复杂模型转换技巧及实例
其实转换成model类是有好处的,转换后可以减少上线后APP崩溃和出现异常,所以我们从这节课开始,要制作model类模型,然后用model的形式编辑UI界面. 类别json的分析 比如现在从后台得到了 ...
- 接着上次的python爬虫,今天进阶一哈,局部解析爬取网页数据
*解析网页数据的仓库 用Beatifulsoup基于lxml包lxml包基于html和xml的标记语言的解析包.可以去解析网页的内容,把我们想要的提取出来. 第一步.导入两个包,项目中必须包含beau ...