0

我正在使用 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 查找信息。等等。

4

0 回答 0