提交 999af438 authored 作者: liruixin's avatar liruixin

Merge branch 'bug_log_optimization_20240413' into dev

...@@ -3,18 +3,41 @@ package com.clx.performance.job; ...@@ -3,18 +3,41 @@ package com.clx.performance.job;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.clx.performance.component.ThirdComponent; import com.clx.performance.component.ThirdComponent;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao; import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO; import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.feign.TransportFeignService; import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord; import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.OrderChildPaySyncParam; import com.clx.performance.param.feign.transport.OrderChildPaySyncParam;
import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.dto.HttpDTO; import com.msl.common.dto.HttpDTO;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -26,6 +49,18 @@ public class OrderChildPaySyncTransportJob { ...@@ -26,6 +49,18 @@ public class OrderChildPaySyncTransportJob {
private final TransportFeignService transportFeignService; private final TransportFeignService transportFeignService;
private final SettlementMqHandlerService settlementMqHandlerService;
private final SettlementDriverDetailService settlementDriverDetailService;
private final SettlementOwnerDetailService settlementOwnerDetailService;
private final SettlementMqService settlementMqService;
private final OrderChildDao orderChildDao;
private final OrderGoodsDao orderGoodsDao;
/** /**
* 同步网络货运 * 同步网络货运
*/ */
...@@ -52,4 +87,32 @@ public class OrderChildPaySyncTransportJob { ...@@ -52,4 +87,32 @@ public class OrderChildPaySyncTransportJob {
} }
} }
/**
* 结算信息job处理
* */
@XxlJob("settlementDetailInvoiceTypeSyncJob")
public void settlementDetailInvoiceTypeSyncJob() {
String jobParam = XxlJobHelper.getJobParam();
log.info("XxlJobHelper jobParam:{}", jobParam);
SettlementDetailInvoiceTypeSyncMqParam mqParam = new SettlementDetailInvoiceTypeSyncMqParam();
mqParam.setChildNo(jobParam);
settlementMqHandlerService.settlementDetailInvoiceTypeSync(mqParam);
}
@XxlJob("testJob")
public void test2() {
String jobParam = XxlJobHelper.getJobParam();
log.info("XxlJobHelper jobParam:{}", jobParam);
OrderChild orderChild = orderChildDao.getByChildNo(jobParam).get();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
Integer settlementDriverDetailId = settlementDriverDetailService.saveSettlementDetail(orderChild);
Integer settlementOwnerDetailId = settlementOwnerDetailService.saveSettlementDetail(orderChild, orderGoods);
settlementMqService.settlementDetailAdd(settlementDriverDetailId, settlementOwnerDetailId);
}
} }
...@@ -69,7 +69,10 @@ public class OrderChildDtsListener { ...@@ -69,7 +69,10 @@ public class OrderChildDtsListener {
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",after); log.info("修改:{}",after);
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) &&
(!Objects.equals(before.getStatus(),after.getStatus()) || !Objects.equals(before.getLoadNet(),after.getLoadNet()))){ (!Objects.equals(before.getStatus(),after.getStatus()) ||
!Objects.equals(before.getLoadNet(),after.getLoadNet())) ||
!Objects.equals(before.getUnloadNet(),after.getUnloadNet())
){
orderChildChangeAfter(after); orderChildChangeAfter(after);
} }
if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){ if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){
......
...@@ -109,6 +109,7 @@ public class OrderChildSyncTransportListener { ...@@ -109,6 +109,7 @@ public class OrderChildSyncTransportListener {
public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark, public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark,
SettlementOwnerDetail settlementOwnerDetail, SettlementOwnerDetail settlementOwnerDetail,
Integer invoiceType, SettlementDriverDetail settlementDriverDetail) { Integer invoiceType, SettlementDriverDetail settlementDriverDetail) {
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (null != bean && bean.getCode() == 0) { if (null != bean && bean.getCode() == 0) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运成功,运单号为{}", orderChild.getChildNo()); log.info("当前OrderChildSyncTransportListener监听同步网络货运成功,运单号为{}", orderChild.getChildNo());
......
...@@ -741,7 +741,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -741,7 +741,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setFinishTime(now); update.setFinishTime(now);
orderChildDao.updateEntityByKey(update); orderChildDao.updateEntityByKey(update);
orderCancelComponent.backFillTonnageForArtificial(orderChild.getOrderGoodsNo(), orderChild.getWeight()); orderCancelComponent.backFillTonnageForArtificial(orderChild.getOrderGoodsNo(), orderChild.getLoadNet());
goodsOrderTruckRecordComponent.releaseAllDriverCard(orderChild.getOrderGoodsNo(), orderChild.getTruckNo()); goodsOrderTruckRecordComponent.releaseAllDriverCard(orderChild.getOrderGoodsNo(), orderChild.getTruckNo());
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1); driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
......
...@@ -774,6 +774,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -774,6 +774,7 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateReload(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) { private void updateReload(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
log.info("装车毛重:{}, 装车皮重:{}", param.getLoadRough(), param.getLoadTare());
BigDecimal loadNet = param.getLoadRough().subtract(param.getLoadTare()); BigDecimal loadNet = param.getLoadRough().subtract(param.getLoadTare());
if (loadNet.compareTo(new BigDecimal(99)) > 0) { if (loadNet.compareTo(new BigDecimal(99)) > 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_NET_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_NET_ERROR);
...@@ -791,8 +792,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -791,8 +792,8 @@ public class OrderChildServiceImpl implements OrderChildService {
imageList.add(image); imageList.add(image);
} }
BigDecimal dif = loadNet.subtract(orderChild.getWeight()); BigDecimal dif = loadNet.subtract(orderChild.getLoadNet());
log.info("dif:{}, loadNet:{}", dif, loadNet);
orderChild.setLoadRough(param.getLoadRough()); orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare()); orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(loadNet); orderChild.setLoadNet(loadNet);
...@@ -1346,6 +1347,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1346,6 +1347,8 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
@Override @Override
public OrderChildVO getOrderChildInfo(String childNo) { public OrderChildVO getOrderChildInfo(String childNo) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
...@@ -1605,6 +1608,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1605,6 +1608,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif, orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif,
dif.subtract(orderGoods.getResidueTransportWeight()), orderGoodsStatus); dif.subtract(orderGoods.getResidueTransportWeight()), orderGoodsStatus);
} else { } else {
log.info("货单吨数有剩余,归还吨数:{}", dif);
// 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态 // 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus); orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
} }
......
...@@ -270,8 +270,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -270,8 +270,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
//插入冻结流水 //插入冻结流水
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(loginUserInfo.getUserName()); runningWaterRecord.setOwnerUserName(account.getOwnerUserName());
runningWaterRecord.setMobile(loginUserInfo.getUserMobile()); runningWaterRecord.setMobile(account.getMobile());
runningWaterRecord.setCreateBy(loginUserInfo.getUserName()); runningWaterRecord.setCreateBy(loginUserInfo.getUserName());
runningWaterRecord.setRelationId(entity.getCaseOutNo()); runningWaterRecord.setRelationId(entity.getCaseOutNo());
//变动金额 //变动金额
...@@ -327,8 +327,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -327,8 +327,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
ownerCaseOutDao.saveEntity(entity); ownerCaseOutDao.saveEntity(entity);
//插入冻结流水 //插入冻结流水
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(loginUserInfo.getUserName()); runningWaterRecord.setOwnerUserName(account.getOwnerUserName());
runningWaterRecord.setMobile(loginUserInfo.getUserMobile()); runningWaterRecord.setMobile(account.getMobile());
runningWaterRecord.setCreateBy(loginUserInfo.getUserName()); runningWaterRecord.setCreateBy(loginUserInfo.getUserName());
runningWaterRecord.setRelationId(entity.getCaseOutNo()); runningWaterRecord.setRelationId(entity.getCaseOutNo());
...@@ -401,7 +401,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -401,7 +401,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
//需要插入充值流水 //需要插入充值流水
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(account.getOwnerUserName()); runningWaterRecord.setOwnerUserName(account.getOwnerUserName());
runningWaterRecord.setMobile(loginUserInfo.getUserMobile()); runningWaterRecord.setMobile(account.getMobile());
runningWaterRecord.setCreateBy(loginUserInfo.getUserName()); runningWaterRecord.setCreateBy(loginUserInfo.getUserName());
runningWaterRecord.setRelationId(ownerTopUp.getTopUpNo()); runningWaterRecord.setRelationId(ownerTopUp.getTopUpNo());
...@@ -480,8 +480,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -480,8 +480,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(ownerCaseOut.getOwnerUserNo(), ownerCaseOut.getAccountType()); account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(ownerCaseOut.getOwnerUserNo(), ownerCaseOut.getAccountType());
//插入提现成功流水 //插入提现成功流水
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(loginUserInfo.getUserName()); runningWaterRecord.setOwnerUserName(account.getOwnerUserName());
runningWaterRecord.setMobile(loginUserInfo.getUserMobile()); runningWaterRecord.setMobile(account.getMobile());
runningWaterRecord.setCreateBy(loginUserInfo.getUserName()); runningWaterRecord.setCreateBy(loginUserInfo.getUserName());
runningWaterRecord.setRelationId(ownerCaseOut.getCaseOutNo()); runningWaterRecord.setRelationId(ownerCaseOut.getCaseOutNo());
......
package com.clx.performance.service.impl.settle; package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.clx.order.vo.feign.FeignOrderInfoVO; import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.MslPaymentConfig; import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
...@@ -13,10 +14,7 @@ import com.clx.performance.enums.OrderChildEnum; ...@@ -13,10 +14,7 @@ import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum; import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PayRemarkEnum; import com.clx.performance.enums.PayRemarkEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum; import com.clx.performance.enums.settle.*;
import com.clx.performance.enums.settle.SettlementLogEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementPlatformEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService; import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.extranal.user.OwnerInfoService; import com.clx.performance.extranal.user.OwnerInfoService;
...@@ -109,15 +107,21 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -109,15 +107,21 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
private OrderService orderService; private OrderService orderService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq) { public void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
log.info("当前车主计费信息{},司机计费信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
if (settlementOwnerDetail.getInvoiceFreight() == null) {
log.info("当前车主计费信息开票金额为空,需要重新处理计算开票金额");
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).get();
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
SettlementOwnerDetail update = new SettlementOwnerDetail();
update.setId(settlementOwnerDetail.getId());
update.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwnerDetailDao.updateEntityByKey(update);
}
String settlementNo = null ; String settlementNo = null ;
SettlementOwner settlementOwner = null; SettlementOwner settlementOwner = null;
...@@ -482,4 +486,13 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -482,4 +486,13 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY)); return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY));
} }
private BigDecimal invoiceFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
}
}
} }
...@@ -50,14 +50,14 @@ public abstract class GoodsOrderStrategy { ...@@ -50,14 +50,14 @@ public abstract class GoodsOrderStrategy {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "订单已暂停,无法进行提量"); throw new ServiceSystemException(ResultEnum.DATA_ERROR, "订单已暂停,无法进行提量");
} }
String transportBeginTime = orderInfo.getTransportBeginTime(); String transportBeginTime = orderInfo.getTransportBeginTime();
if (!"test".equals(environment.getActiveProfiles()[0])) { /* if (!"test".equals(environment.getActiveProfiles()[0])) {
for (OrderGoodsChildParams param : orderGoodsParams.getOrderGoodsChildParams()) { for (OrderGoodsChildParams param : orderGoodsParams.getOrderGoodsChildParams()) {
String pendingOrderTime = param.getPendingOrderTime(); String pendingOrderTime = param.getPendingOrderTime();
if (DateUtils.parseDateTime(pendingOrderTime).get().isBefore(DateUtils.parseDateTime(transportBeginTime).get())) { if (DateUtils.parseDateTime(pendingOrderTime).get().isBefore(DateUtils.parseDateTime(transportBeginTime).get())) {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "挂单时间不能早于拉运开始时间"); throw new ServiceSystemException(ResultEnum.DATA_ERROR, "挂单时间不能早于拉运开始时间");
} }
} }
} }*/
//多个定向单不允许车辆重复 //多个定向单不允许车辆重复
List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams(); List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams();
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!--
说明:
1、日志级别及文件
日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中
例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名
例如log-level-2013-12-21.0.log
其它级别的日志也是如此。
2、文件路径
若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
若部署到Tomcat下,则在Tomcat下的logs文件中
3、Appender
FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名
FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名
stdout将日志信息输出到控制上,为方便开发测试使用
-->
<!-- 彩色日志 --> <!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 --> <!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wex"
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 --> <!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> <property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} [%tid] %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<contextName>order-service</contextName> <property name="FILE_LOG_PATTERN"
<property name="LOG_PATH" value="/logs" /> value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger Line:%-3L - %msg%n"/>
<!--设置系统日志目录-->
<property name="APPDIR" value="clx-performance" />
<!-- 日志记录器,日期滚动记录 --> <!-- 日志根目录 -->
<appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <property name="LOG_PATH" value="./logs"/>
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 服务名 -->
<file>${LOG_PATH}/${APPDIR}/log_error.log</file> <property name="APP_DIR" value="clx-performance"/>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始,
命名日志文件,例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志记录器,日期滚动记录 --> <!-- 日志记录器,日期滚动记录 -->
<appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/${APPDIR}/log_warn.log</file> <file>${LOG_PATH}/${APP_DIR}/log_info.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <fileNamePattern>${LOG_PATH}/${APP_DIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, <!--最大日志天数-->
命名日志文件,例如log-error-2013-12-21.0.log --> <maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!--单个日志文件最大大小-->
<maxFileSize>20MB</maxFileSize> <maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> <!--总日志大小-->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<!-- 追加方式记录日志 --> <!-- 追加方式记录日志 -->
<append>true</append> <append>true</append>
<!-- 日志文件的格式 --> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger Line:%-3L - %msg%n</pattern> <Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
<charset>utf-8</charset> <charset>utf-8</charset>
</encoder> </encoder>
<!-- 此日志文件只记录info级别的 --> <!-- 阈值过滤器,记录info及以上级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level> <level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> </filter>
</appender> </appender>
<!-- 日志记录器,日期滚动记录 --> <!-- 日志记录器,日期滚动记录 -->
<appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/${APPDIR}/log_info.log</file> <file>${LOG_PATH}/${APP_DIR}/log_error.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <fileNamePattern>${LOG_PATH}/${APP_DIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, <!--最大日志天数-->
命名日志文件,例如log-error-2013-12-21.0.log --> <maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!--单个日志文件最大大小-->
<maxFileSize>20MB</maxFileSize> <maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> <!--总日志大小-->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<!-- 追加方式记录日志 --> <!-- 追加方式记录日志 -->
<append>true</append> <append>true</append>
<!-- 日志文件的格式 --> <!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger Line:%-3L - %msg%n</pattern> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
<charset>utf-8</charset> <charset>utf-8</charset>
</encoder> </encoder>
<!-- 此日志文件只记录info级别的 --> <!-- 级别过滤器,只记录error级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level> <level>error</level>
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
...@@ -123,26 +85,43 @@ ...@@ -123,26 +85,43 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder 默认配置为PatternLayoutEncoder--> <!--encoder 默认配置为PatternLayoutEncoder-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
</layout>
<charset>utf-8</charset> <charset>utf-8</charset>
</encoder> </encoder>
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level> <level>debug</level>
</filter> </filter>
</appender> </appender>
<!-- <logger name="org.springframework" level="WARN" /> --> <!--skywalking收集日志-->
<!-- <logger name="org.hibernate" level="WARN" /> --> <appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder>
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</encoder>
</appender>
<!--异步日志-->
<!--<appender name="ASYNC-GRPC" class="ch.qos.logback.classic.AsyncAppender">
&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;
<discardingThreshold>0</discardingThreshold>
&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为256 &ndash;&gt;
<queueSize>256</queueSize>
&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;
<appender-ref ref="GRPC_LOG"/>
</appender>-->
<!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 --> <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
<root level="INFO"> <root level="INFO">
<appender-ref ref="FILEERROR" /> <appender-ref ref="FILE_INFO"/>
<appender-ref ref="FILEWARN" /> <appender-ref ref="FILE_ERROR"/>
<appender-ref ref="FILEINFO" /> <appender-ref ref="GRPC_LOG"/>
<!--控制台-->
生产环境将请stdout,testfile去掉 <appender-ref ref="STDOUT"/>
<appender-ref ref="STDOUT" />
</root> </root>
</configuration> </configuration>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论