提交 d66c44bc authored 作者: 李秋林's avatar 李秋林

代码缓存

上级 0376ab51
...@@ -31,6 +31,7 @@ build/ ...@@ -31,6 +31,7 @@ build/
!**/src/main/**/build/ !**/src/main/**/build/
!**/src/test/**/build/ !**/src/test/**/build/
/logs/** /logs/**
/LOG_PATH_IS_UNDEFINED
### VS Code ### ### VS Code ###
.vscode/ .vscode/
...@@ -136,11 +136,12 @@ ...@@ -136,11 +136,12 @@
<version>4.6.0</version> <version>4.6.0</version>
</dependency> </dependency>
<!-- 腾讯云服务 -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<dependency> <dependency>
<groupId>com.tencentcloudapi</groupId> <groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId> <artifactId>tencentcloud-sdk-java-sms</artifactId>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<version>3.1.998</version> <version>3.1.998</version>
</dependency> </dependency>
...@@ -162,14 +163,26 @@ ...@@ -162,14 +163,26 @@
<version>4.4.0</version> <version>4.4.0</version>
</dependency> </dependency>
<!-- 腾讯云-短信服务SDK--> <dependency>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. --> <groupId>com.alibaba.cloud</groupId>
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 --> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <dependency>--> <version>2021.1</version>
<!-- <groupId>com.tencentcloudapi</groupId>--> </dependency>
<!-- <artifactId>tencentcloud-sdk-java</artifactId>-->
<!-- <version>3.1.1000</version>--> <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<!-- </dependency>--> <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
<!--解决SpringCloud项目无法读取bootstrap.yaml配置文件-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -3,8 +3,11 @@ package com.wangxiaolu.promotion; ...@@ -3,8 +3,11 @@ package com.wangxiaolu.promotion;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync
@EnableConfigurationProperties @EnableConfigurationProperties
@EnableAspectJAutoProxy @EnableAspectJAutoProxy
@SpringBootApplication @SpringBootApplication
......
...@@ -85,9 +85,9 @@ public class TemporaryActivityCoreController { ...@@ -85,9 +85,9 @@ public class TemporaryActivityCoreController {
* 促销员[今日活动]数据提交审批 * 促销员[今日活动]数据提交审批
* 修改审批状态 * 修改审批状态
*/ */
@PutMapping("/reported/approve/{reported_id}") @PutMapping("/reported/approve/submit/{id}")
public void activityReportedUpdateApproveStatus(@PathVariable("reported_id") @NotNull Long id) { public void activityReportedSubmit(@PathVariable("id") @NotNull Long id) {
tempActivityCoreService.activityReportedUpdateApproveStatus(id); tempActivityCoreService.activityReportedSubmit(id);
} }
......
...@@ -28,10 +28,12 @@ public class WeChatUserQueryController { ...@@ -28,10 +28,12 @@ public class WeChatUserQueryController {
/** /**
* 根据OpenId、Phone登录(促销员查询是否存在) * 根据OpenId、Phone登录(促销员查询是否存在)
*
* @return 非null则登录成功 * @return 非null则登录成功
*/ */
@PostMapping("/temporary/login/phone_openid") @PostMapping("/temporary/login/phone_openid")
public boolean temporaryLoginByPhoneAndOpenId(@RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) { public boolean temporaryLoginByPhoneAndOpenId(@RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) {
phontAndOpenIdVerify(wxTemporaryLoginVo);
if (!DataUtils.phonePattern(wxTemporaryLoginVo.getPhone())) { if (!DataUtils.phonePattern(wxTemporaryLoginVo.getPhone())) {
throw new ParamException(RCode.PHONE_PARAM_ERROR, null); throw new ParamException(RCode.PHONE_PARAM_ERROR, null);
} }
...@@ -44,15 +46,18 @@ public class WeChatUserQueryController { ...@@ -44,15 +46,18 @@ public class WeChatUserQueryController {
*/ */
@PostMapping("/temporary/phone_openid") @PostMapping("/temporary/phone_openid")
public WxTemporaryInfoDto getTemporaryInfoByOpenIdAndPhone(@RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) { public WxTemporaryInfoDto getTemporaryInfoByOpenIdAndPhone(@RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) {
// todo 上线开放 phontAndOpenIdVerify(wxTemporaryLoginVo);
// if (StringUtils.isBlank(wxTemporaryLoginVo.getOpenId()) || StringUtils.isBlank(wxTemporaryLoginVo.getPhone()) ){
// throw new ParamException(RCode.LOGIN_PARAM_ERROR, null);
// }
WxTemporaryInfoDto temporaryInfoDto = weChatUserQueryService.getTemporaryInfoByOpenIdAndPhone(wxTemporaryLoginVo.getOpenId(), wxTemporaryLoginVo.getPhone()); WxTemporaryInfoDto temporaryInfoDto = weChatUserQueryService.getTemporaryInfoByOpenIdAndPhone(wxTemporaryLoginVo.getOpenId(), wxTemporaryLoginVo.getPhone());
if (Objects.isNull(temporaryInfoDto)) { if (Objects.isNull(temporaryInfoDto)) {
throw new ParamException(RCode.LOGIN_PARAM_ERROR, null); throw new ParamException(RCode.LOGIN_PARAM_ERROR, null);
} }
return temporaryInfoDto; return temporaryInfoDto;
} }
private void phontAndOpenIdVerify(WxTemporaryLoginVo wxTemporaryLoginVo) {
// todo 上线开放
// if (StringUtils.isBlank(wxTemporaryLoginVo.getOpenId()) || StringUtils.isBlank(wxTemporaryLoginVo.getPhone())) {
// throw new ParamException(RCode.LOGIN_PARAM_ERROR, null);
// }
}
} }
package com.wangxiaolu.promotion.exception;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.result.basedata.StatusCode;
import lombok.Getter;
/**
* @author : liqiulin
* @date : 2024-03-28 17
* @describe : response包装R失败
*/
@Getter
public class DataException extends RuntimeException {
private int code;
private String msg;
public DataException(StatusCode statusCode, String message) {
super(message);
this.code = statusCode.getCode();
this.msg = statusCode.getMsg();
}
/**
* 默认异常编码
*/
public DataException(String message) {
super(message);
this.code = RCode.API_ERROR.getCode();
this.msg = RCode.API_ERROR.getMsg();
}
}
...@@ -5,6 +5,7 @@ import com.wangxiaolu.promotion.exception.FlowException; ...@@ -5,6 +5,7 @@ import com.wangxiaolu.promotion.exception.FlowException;
import com.wangxiaolu.promotion.exception.ParamException; import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode; import com.wangxiaolu.promotion.result.basedata.RCode;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
...@@ -65,4 +66,11 @@ public class ControllerExceptionAdvice { ...@@ -65,4 +66,11 @@ public class ControllerExceptionAdvice {
} }
return new R(RCode.API_DATA_ERROR.getCode(), RCode.API_DATA_ERROR.getMsg(), msg); return new R(RCode.API_DATA_ERROR.getCode(), RCode.API_DATA_ERROR.getMsg(), msg);
} }
@ExceptionHandler({TooManyResultsException.class})
public R tooManyResultsExceptionHandler(TooManyResultsException e) {
String msg = e.getMessage();
return new R(RCode.DATA_TOO_MANY_ERROR.getCode(), msg);
}
} }
...@@ -26,6 +26,8 @@ public enum RCode implements StatusCode { ...@@ -26,6 +26,8 @@ public enum RCode implements StatusCode {
API_DATA_ERROR(2001, "业务数据异常"), API_DATA_ERROR(2001, "业务数据异常"),
DATA_HAVE_ERROR(2002, "数据已存在,不可新增"), DATA_HAVE_ERROR(2002, "数据已存在,不可新增"),
STATUS_UPDATE_ERROR(2003, "当前状态不可修改"), STATUS_UPDATE_ERROR(2003, "当前状态不可修改"),
DATA_NOT_HAVE_ERROR(2004, "数据不存在"),
DATA_TOO_MANY_ERROR(2005, "唯一数据存在多条"),
/** /**
* user * user
......
...@@ -28,5 +28,5 @@ public interface TemporaryActivityCoreService { ...@@ -28,5 +28,5 @@ public interface TemporaryActivityCoreService {
/** /**
* 活动上报数据修改审批状态 * 活动上报数据修改审批状态
*/ */
void activityReportedUpdateApproveStatus(Long id); void activityReportedSubmit(Long id);
} }
...@@ -12,6 +12,7 @@ import com.wangxiaolu.promotion.enums.activity.ClockType; ...@@ -12,6 +12,7 @@ import com.wangxiaolu.promotion.enums.activity.ClockType;
import com.wangxiaolu.promotion.enums.activity.LogType; import com.wangxiaolu.promotion.enums.activity.LogType;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus; import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import com.wangxiaolu.promotion.exception.FlowException; import com.wangxiaolu.promotion.exception.FlowException;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto; import com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto;
...@@ -126,9 +127,13 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe ...@@ -126,9 +127,13 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void activityReportedUpdateApproveStatus(Long id) { public void activityReportedSubmit(Long id) {
// 判断此id任务是否存在,并且是否满足提交审批条件 // 判断此id任务是否存在,并且是否满足提交审批条件
TemporaryActivityReportedDto reportedDto = temporaryActivityReportedDao.findOneById(id); TemporaryActivityReportedDto reportedDto = temporaryActivityReportedDao.findOneById(id);
if (Objects.isNull(reportedDto)){
throw new ParamException(RCode.DATA_NOT_HAVE_ERROR, null);
}
TemActApproveStatus approveStatus = reportedDto.getApproveStatus(); TemActApproveStatus approveStatus = reportedDto.getApproveStatus();
if (!TemActApproveStatus.SUBMITTED.name().equals(approveStatus.name()) && !TemActApproveStatus.SEND_BACK.name().equals(approveStatus.name())) { if (!TemActApproveStatus.SUBMITTED.name().equals(approveStatus.name()) && !TemActApproveStatus.SEND_BACK.name().equals(approveStatus.name())) {
throw new FlowException(RCode.STATUS_UPDATE_ERROR, null); throw new FlowException(RCode.STATUS_UPDATE_ERROR, null);
......
...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.utils; ...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -22,9 +23,12 @@ public class QinCeUtils { ...@@ -22,9 +23,12 @@ public class QinCeUtils {
/** /**
* =================== 勤策API - config =================== * =================== 勤策API - config ===================
*/ */
private static final String OPEN_API = "https://openapi.region2.qince.com"; @Value("${qince.open_api}")
private static final String OPEN_ID = "8030282350124307682"; private String OPEN_API;
private static final String APP_KEY = "Gx0yQw4UhDtNjESmDl"; @Value("${qince.open_id}")
private String OPEN_ID;
@Value("${qince.app_key}")
private String APP_KEY;
/** /**
...@@ -67,7 +71,7 @@ public class QinCeUtils { ...@@ -67,7 +71,7 @@ public class QinCeUtils {
public Map<String, Object> queryEmployeeParam(boolean queryId) { public Map<String, Object> queryEmployeeParam(boolean queryId) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
// 根据来源勤策的员工唯一标识精确查询 // 根据来源勤策的员工唯一标识精确查询
if (queryId){ if (queryId) {
params.put("id", ""); params.put("id", "");
} }
...@@ -96,26 +100,26 @@ public class QinCeUtils { ...@@ -96,26 +100,26 @@ public class QinCeUtils {
public Map<String, Object> queryShopParam() { public Map<String, Object> queryShopParam() {
HashMap<String, Object> params = new HashMap<>(); HashMap<String, Object> params = new HashMap<>();
// 分页页码,默认1 // 分页页码,默认1
params.put("page_number","1"); params.put("page_number", "1");
// 记录状态。0:已删除,1:正常 // 记录状态。0:已删除,1:正常
// 0:已删除:客户回收站中的终端数据 // 0:已删除:客户回收站中的终端数据
params.put("status",""); params.put("status", "");
// 勤策的门店唯一ID // 勤策的门店唯一ID
params.put("id",""); params.put("id", "");
// 来源于第三方系统的门店唯一ID,对应新增门店 (store_id)字段,只有当数据来源于新增接口时才有值,如果数据从勤策系统中直接创建则该字段值为空。 如果两个值同时存在则优先顺序为store_waiqin_id、store_id // 来源于第三方系统的门店唯一ID,对应新增门店 (store_id)字段,只有当数据来源于新增接口时才有值,如果数据从勤策系统中直接创建则该字段值为空。 如果两个值同时存在则优先顺序为store_waiqin_id、store_id
params.put("store_id",""); params.put("store_id", "");
// 门店名称,唯一 // 门店名称,唯一
params.put("store_name",""); params.put("store_name", "");
// 门店编码 // 门店编码
params.put("store_code",""); params.put("store_code", "");
// 根据门店客户经理标识查询 // 根据门店客户经理标识查询
params.put("store_manager_id",""); params.put("store_manager_id", "");
// 门店类型编码,store_type、store_type_code如果同时存在优先取store_type_code // 门店类型编码,store_type、store_type_code如果同时存在优先取store_type_code
params.put("store_type_code",""); params.put("store_type_code", "");
// 门店类型 // 门店类型
params.put("store_type",""); params.put("store_type", "");
// 门店所属销售区域,此字段需要销售区域的完整层级结构, 多层级间以“,”分隔,如:华中大区,南京分区,秦淮社区 // 门店所属销售区域,此字段需要销售区域的完整层级结构, 多层级间以“,”分隔,如:华中大区,南京分区,秦淮社区
params.put("store_district",""); params.put("store_district", "");
return params; return params;
} }
......
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true
username: LnNDBM
password: fd0%bhD4@oO(%
redis:
port: 21101
host: bj-crs-oyzhz3c6.sql.tencentcdb.com
database: 0
password: u)R3jrHk(qwt~mv$Tg=U
logging:
config: classpath:logback-spring.xml
async:
executor:
thread:
core_pool_size: 4
name:
prefix: promotion-
wx:
miniapp:
configs:
- appid: wxac14dc7765484d7d
secret: b3315e66608a397f88e7e82b8f950bcd
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
temporary:
token_secret: sXwHPj#U#xmim^ts
tengxunyun:
# 腾讯云个人账号信息
secret_d: AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key: SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing: sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing: ap-beijing
#应用ID(默认应用)
sdk_app_id_defult: 1400903035
#签名内容
sign_name_a: 北京王小卤
#模板ID
template_id_a: 2127434
#验证码过期时间(分钟)
overdue_long: 5
qince:
open_api: https://openapi.region2.qince.com
open_id: 8030282350124307682
app_key: Gx0yQw4UhDtNjESmDl
# mybatis-plus 打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
\ No newline at end of file
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:192.168.0.3:3306/promotion?autoReconnect=true
username: NvqGbJXH
password: D9Y@FR,84B*$MD^A36&m
redis:
port: 7548
host: 192.168.0.11
database: 1
password: u)R3jrHk(qwt~mv$Tg=U
logging:
config: classpath:logback-spring.xml
async:
executor:
thread:
core_pool_size: 4
name:
prefix: promotion-
wx:
miniapp:
configs:
- appid: wxac14dc7765484d7d
secret: b3315e66608a397f88e7e82b8f950bcd
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
temporary:
token_secret: sXwHPj#U#xmim^ts
tengxunyun:
# 腾讯云个人账号信息
secret_d: AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key: SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing: sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing: ap-beijing
#应用ID(默认应用)
sdk_app_id_defult: 1400903035
#签名内容
sign_name_a: 北京王小卤
#模板ID
template_id_a: 2127434
#验证码过期时间(分钟)
overdue_long: 5
qince:
open_api: https://openapi.region2.qince.com
open_id: 8546408787259919799
app_key: oV0FHfMt81Tii2_kst
# mybatis-plus 打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
\ No newline at end of file
...@@ -4,58 +4,6 @@ server: ...@@ -4,58 +4,6 @@ server:
spring: spring:
application: application:
name: wangxiaolu-promotion-service name: wangxiaolu-promotion-service
profiles: profiles:
active: dev active: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true
username: LnNDBM
password: fd0%bhD4@oO(%
redis:
port: 6379
host: 127.0.0.1
logging:
config: classpath:logback-spring.xml
async:
executor:
thread:
core_pool_size: 4
name:
prefix: promotion-
wx:
miniapp:
configs:
- appid: wxac14dc7765484d7d
secret: b3315e66608a397f88e7e82b8f950bcd
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
temporary:
token_secret: sXwHPj#U#xmim^ts
tengxunyun:
# 腾讯云个人账号信息
secret_d: AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key: SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing: sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing: ap-beijing
#应用ID(默认应用)
sdk_app_id_defult: 1400903035
#签名内容
sign_name_a: 北京王小卤
#模板ID
template_id_a: 2127434
#验证码过期时间(分钟)
overdue_long: 5
# mybatis-plus 打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
\ No newline at end of file
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</springProfile> </springProfile>
<springProfile name="qa,live"> <springProfile name="qa,live">
<property name="LOG_PATH" value="./data/logs/${APP_NAME}/${HOSTNAME}" /> <property name="LOG_PATH" value="/var/logs/${APP_NAME}/${HOSTNAME}" />
</springProfile> </springProfile>
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${HOSTNAME} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${HOSTNAME} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论