一、添加自定义配置
<!--特殊业务记录单独的日志文件-->
<appender name="ASYNC_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/async.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/async-%d{yyyy-MM-dd}.log.%i
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>2</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}
-%msg%n
</Pattern>
</layout>
</appender>
<!--不同业务打印到指定文件-->
<logger name="asyncLog" additivity="false" level="INFO">
<appender-ref ref="ASYNC_FILE"/>
</logger>
二、代码引用日志
@Aspect
@Component
public class AsyncLogAspect {
private static final Logger LOGGER=LoggerFactory.getLogger("asyncLog");
/**
* 访问其他系统失败后添加本地数据库日志切入点
*/
@Pointcut("execution(public * com.zhq.business.asynclog.service.*.add(..))")
public void syncLogAdd(){};
/**
* mq->http->mysql异步访问失败,记录到日志文件
* @param joinPoint 参数
* @param e 异常
*/
@AfterThrowing(pointcut = "syncLogAdd()",throwing = "e")
public void afterAsyncLogAddThrowing(JoinPoint joinPoint, Exception e){
String methodName = joinPoint.getSignature().getName();
LOGGER.error("###afterAddThrowing()流程启动异常"+"The method:{} , occurs exception:{}" ,methodName,e);
Object[] obj = joinPoint.getArgs();
for (Object argItem : obj) {
if(argItem instanceof AsyncLog){
AsyncLog asyncLog=(AsyncLog)argItem;
asyncLog.setLastError(e.getMessage());
LOGGER.error("####!!!!支付成功后访问异步通知mq->http->mysql失败,失败日志asyncLog:{}",JSON.toJSONString(asyncLog));
}
}
}
}
三、案例测试