1.创建一个springboot项目
具体流程不在展示
需要的包如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.创建统一日志管理工具类
package com.threadpoollog.threadpoollog.log;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @Author hzb
* @Date 2019/11/29 18:21
* @Description: 统一日志管理工具
*/
public class LogManager {
// 日志记录操作延时
private final int OPERATE_DELAY_TIME = 200;
// 异步操作记录日志的线程池
private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
// LogManager为单例模式
private LogManager(){}
private static LogManager logManager = new LogManager();
public static LogManager getLogManager(){
return logManager;
}
// 统一执行日志的方法
public void executeLog(TimerTask task){
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
}
3.创建日志操作任务创建工厂类
package com.threadpoollog.threadpoollog.log.factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.TimerTask;
/**
* @Author hzb
* @Date 2019/11/29 18:26
* @Description: 日志操作任务创建工厂
*/
public class LogTaskFactory {
private static Logger logger = LoggerFactory.getLogger(LogTaskFactory.class);
/**
* @param strLog 日志内容
* @param c 记录日志类的class(传此值的话可以记录到底是哪个类记录的日志)
* @return
*/
public static TimerTask log(String strLog, Class c){
return new TimerTask() {
@Override
public void run() {
if (c != null) {
logger = LoggerFactory.getLogger(c);
}
logger.info(strLog);
}
};
}
}
4.创建一个Controller类
package com.threadpoollog.threadpoollog.controller;
import com.threadpoollog.threadpoollog.log.LogManager;
import com.threadpoollog.threadpoollog.log.factory.LogTaskFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author hzb
* @Date 2019/11/29 18:17
* @Description: 用户控制器
*/
@RestController
public class UserController {
@RequestMapping("/user/getUser")
public String getUser(Integer userId){
LogManager.getLogManager().executeLog(LogTaskFactory.log("执行查询用户接口", this.getClass()));
return "userId";
}
}