需求:获取自定义jar包中某个方法的执行日志信息
需要打包的jar中:
定义接口,日志记录
/**
* @author
* @version 1.0
* @description 日志记录
* @date 2021/2/28 16:12
*/
public interface LogRecord {
/**
* 发送日志
* @param msg
*/
void sendInfoLog(String msg);
/**
* 发送日志
* @param msg
*/
void sendErrorLog(String msg);
}
外部要调用的方法
/**
* @author
* @version 1.0
* @description TODO
* @date 2021/2/28 16:14
*/
public class TaskExec {
public static void t4(LogRecord t) throws InterruptedException {
t.sendInfoLog("start t4");
for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
t.sendInfoLog("t4================== i="+i);
}
t.sendInfoLog("end t4");
}
}
要引入这个jar的项目
实现这个接口,先给个默认实现,因为后期你可能不再需要这些日志了
/**
* @author
* @version 1.0
* @description 默认实现
* @date 2021/3/1 21:12
*/
public class DefaultLogRecord implements LogRecord {
@Override
public void sendInfoLog(String s) {
}
@Override
public void sendErrorLog(String s) {
}
}
定义真正要操作的类,这里只把日志放在内存中
/**
* @author
* @version 1.0
* @description 默认实现
* @date 2021/3/1 21:12
*/
public class MyDefaultLogRecord extends DefaultLogRecord {
private List<String> logs=new ArrayList<>();
@Override
public void sendInfoLog(String s) {
logs.add(s);
}
@Override
public void sendErrorLog(String s) {
logs.add(s);
}
public List<String> getLogs() {
return logs;
}
}
调用引入jar的方法
/**
* @author
* @version 1.0
* @description TODO
* @date 2021/2/28 16:44
*/
@Component
public class TaskService {
public void service3(String taskName) {
service.submit(new Runnable() {
@Override
public void run() {
try {
MyDefaultLogRecord logRecord = new MyDefaultLogRecord();
TaskExec.t4(logRecord);
System.out.println(logRecord.getLogs());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}