文章目录
- 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> {@Overridepublic 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@SneakyThrowspublic 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
@Autowiredprivate TestService testService;
添加threadJobHandler
任务
/*** 6、多线程任务,日志*/@XxlJob("threadJobHandler")public void threadJobHandler() throws Exception {testService.log();logger.info("线程开始执行-----11111");}
启动类开启异步任务@EnableAsync
启动调度器和执行器
查看日志
因为是异步的,任务完成后,等10
秒,还会继续打印线程的日志,错误信息也会打印