我正在使用 AOP 记录我的 Spring Boot 应用程序中的所有方法调用。我也可以在控制台中打印它们。但我想将方法日志保存在数据库中。我正在发布到目前为止我所做的代码
这是我为数据提供的硬编码服务
@Service
public class TodoHardcodedService {
private static List<Todo> todos =new ArrayList<Todo>();
private static int idCounter=0;
static {
todos.add(new Todo(++idCounter,"in28minutes","learn to Dance",new Date(),false));
todos.add(new Todo(++idCounter,"in28minutes","learn about Microservices",new Date(),false));
todos.add(new Todo(++idCounter,"in28minutes","learn about AngularJS2",new Date(),false));
}
public List<Todo> findAll(){
return todos;
}
public Todo save(Todo todo) {
if(todo.getId()==-1) {
todo.setId(++idCounter);
todos.add(todo);
}else{
deleteById(todo.getId());
todos.add(todo);
}
return todo;
}
public Todo deleteById(long id) {
Todo todo = findById(id);
if(todo ==null) return null;
if(todos.remove(todo)) {
return todo;
}
return null;
}
public Todo findById(long id) {
for(Todo todo:todos) {
if(todo.getId()==id) {
return todo;
}
}
return null;
}
}
下面是中央日志记录的 AOP 配置
@Aspect
@Component
public class LoggingAdvice {
Logger log = LoggerFactory.getLogger(LoggingAdvice.class);
@Pointcut(value="execution(* com.in28minutes.rest.webservices.restfulwebservices.*.*.*(..) )")
public void myPointcut() {
}
@Around("myPointcut()")
public Object applicationLogger(ProceedingJoinPoint pjp) throws Throwable {
ObjectMapper mapper = new ObjectMapper();
String methodName = pjp.getSignature().getName();
String className = pjp.getTarget().getClass().toString();
Object[] array = pjp.getArgs();
log.info("method invoked " + className + " : " + methodName + "()" + "arguments : "
+ mapper.writeValueAsString(array));
Object object = pjp.proceed();
log.info(className + " : " + methodName + "()" + "Response : "
+ mapper.writeValueAsString(object));
return object;
}
}
以下是日志记录的输出
2020-08-08 16:27:12.973 INFO 5610 --- [nio-8080-exec-6] c.i.r.w.r.todo.LoggingAdvice : method invoked class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findById()arguments : [5] // This is the method name printed here
2020-08-08 16:27:12.975 INFO 5610 --- [nio-8080-exec-6] c.i.r.w.r.todo.LoggingAdvice : class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findById()Response : {"id":5,"username":null,"description":"Edit made","targetDate":1596884036902,"done":false} // This is the method name printed here
2020-08-08 16:27:21.584 INFO 5610 --- [nio-8080-exec-7] c.i.r.w.r.todo.LoggingAdvice : method invoked class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : save()arguments : [{"id":5,"username":null,"description":"Edit made now","targetDate":1596884036902,"done":false}]
2020-08-08 16:27:21.585 INFO 5610 --- [nio-8080-exec-7] c.i.r.w.r.todo.LoggingAdvice : class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : save()Response : {"id":5,"username":null,"description":"Edit made now","targetDate":1596884036902,"done":false}
2020-08-08 16:27:21.604 INFO 5610 --- [nio-8080-exec-8] c.i.r.w.r.todo.LoggingAdvice : method invoked class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findAll()arguments : []
2020-08-08 16:27:21.606 INFO 5610 --- [nio-8080-exec-8] c.i.r.w.r.todo.LoggingAdvice : class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findAll()Response : [{"id":1,"username":"in28minutes","description":"learn to Dance","targetDate":1596883914126,"done":false},{"id":2,"username":"in28minutes","description":"learn about Microservices","targetDate":1596883914126,"done":false},{"id":3,"username":"in28minutes","description":"learn about AngularJS2","targetDate":1596883914126,"done":false},{"id":4,"username":null,"description":"DRE","targetDate":1596884010658,"done":false},{"id":5,"username":null,"description":"Edit made now","targetDate":1596884036902,"done":false}]
2020-08-08 16:34:29.082 INFO 5610 --- [io-8080-exec-10] c.i.r.w.r.todo.LoggingAdvice : method invoked class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findAll()arguments : []
2020-08-08 16:34:29.085 INFO 5610 --- [io-8080-exec-10] c.i.r.w.r.todo.LoggingAdvice : class com.in28minutes.rest.webservices.restfulwebservices.todo.TodoHardcodedService : findAll()Response : [{"id":1,"username":"in28minutes","description":"learn to Dance","targetDate":1596883914126,"done":false},{"id":2,"username":"in28minutes","description":"learn about Microservices","targetDate":1596883914126,"done":false},{"id":3,"username":"in28minutes","description":"learn about AngularJS2","targetDate":1596883914126,"done":false},{"id":4,"username":null,"description":"DRE","targetDate":1596884010658,"done":false},{"id":5,"username":null,"description":"Edit made now","targetDate":1596884036902,"done":false}]
当我将方法保存在数据库中时,我想添加一些关于该方法的附加信息,即 findById() 和用户通过传递 id 查找信息。等等。