文章目录
- 1. xxl-job-core模块添加过滤器
- 2. 执行器logback.xml添加过滤器配置
- 3. 测试
1. xxl-job-core模块添加过滤器
package com.xxl.job.core.config;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.ThrowableProxy;
import ch.qos.logback.classic.spi.ThrowableProxyUtil;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import com.xxl.job.core.context.XxlJobContext;
import com.xxl.job.core.context.XxlJobHelper;
/**
* xxl-job日志自定义过滤器
*
* @author 万飞
* @date 2024/02/29
*/
public class XxlJobLogFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
// 判断是否是处于xxl-job上下文中(通过xxl-job调用发起的)
if (XxlJobContext.getXxlJobContext() != null) {
// 调用xxl-job记录日志的方法 不同版本的xxl-job记录日志的api不一样
XxlJobHelper.log(event.getFormattedMessage());
// 获取ThrowableProxy对象
ThrowableProxy throwableProxy = (ThrowableProxy) event.getThrowableProxy();
// 判断是否有异常
if (throwableProxy != null) {
// 获取异常信息
String stackTrace = ThrowableProxyUtil.asString(throwableProxy);
// 打印异常信息
XxlJobHelper.log("异常信息: {}", stackTrace);
}
}
// 放行
return FilterReply.NEUTRAL;
}
}
2. 执行器logback.xml添加过滤器配置
<filter class="com.xxl.job.core.config.XxlJobLogFilter"/>
3. 测试
编写一个异步执行的任务
TestService
package com.xxl.job.executor.service.jobhandler;
/**
* 测试服务
*
* @author 万飞
* @date 2024/02/29
*/
public interface TestService {
/**
* 日志
*/
void log();
}
TestServiceImpl
package com.xxl.job.executor.service.jobhandler;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* 测试服务
*
* @author 万飞
* @date 2024/02/29
*/
@Service
@Slf4j
public class TestServiceImpl implements TestService {
private static Logger logger = LoggerFactory.getLogger(TestServiceImpl.class);
@Override
@Async
@SneakyThrows
public void log() {
Thread.sleep(10000);
logger.info("线程开始执行");
logger.info("打印日志:这是一条日志信息");
logger.info("线程执行完毕");
log.info("lombok info---");
log.warn("lombok warn---");
// 测试异常日志打印
int i = 1/0;
log.error("lombok error---");
}
}
SampleXxlJob
注入TestService
@Autowired
private TestService testService;
添加threadJobHandler
任务
/**
* 6、多线程任务,日志
*/
@XxlJob("threadJobHandler")
public void threadJobHandler() throws Exception {
testService.log();
logger.info("线程开始执行-----11111");
}
启动类开启异步任务@EnableAsync
启动调度器和执行器
查看日志
因为是异步的,任务完成后,等10
秒,还会继续打印线程的日志,错误信息也会打印