Commit 259bd2d5 by chentianzhong

外部接口

parent 107746a6
......@@ -2,7 +2,6 @@ package com.zq.email.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.OnlineUserDto;
......
......@@ -2,6 +2,9 @@ package com.zq.email.feign;
import com.zq.common.annotation.AnonymousAccess;
import com.zq.common.annotation.Log;
import com.zq.common.annotation.rest.AnonymousGetMapping;
import com.zq.common.annotation.rest.AnonymousPostMapping;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
......@@ -57,4 +60,18 @@ public interface AdminFeignClient {
@Log("获取指定人员")
@ApiOperation("获取指定人员")
@AnonymousGetMapping("/users/getUserById/{userId}")
CustomerUserVo getUserById(@PathVariable Long userId);
@ApiOperation("根据人员标识查询用户")
@AnonymousPostMapping("/getBypCode/{pCode}")
ResultVo<CustomerUserVo> getBypCode(@PathVariable String pCode);
}
......@@ -74,6 +74,16 @@ public class AdminFeignFallbackFactory implements FallbackFactory<AdminFeignClie
return ResultVo.fail("admin服务调用异常-->getBySystemTag异常");
}
@Override
public CustomerUserVo getUserById(Long userId) {
return null;
}
@Override
public ResultVo<CustomerUserVo> getBypCode(String pCode) {
return ResultVo.fail("admin服务调用异常-->get> getBypCode异常");
}
};
}
......
......@@ -26,9 +26,9 @@ public interface IEmailContentService extends IService<EmailContent> {
EmailContent saveContent(EmailEditVo vo, OnlineUserDto adminContext);
EmailContent saveContentApi(ApiSendEmailVo emailVo, CustomerUserVo data, List<Long> receiveIds);
EmailContent saveContentApi(ApiSendEmailVo emailVo, CustomerUserVo formVo, List<Long> receiveIds);
EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formUser);
EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formVo);
void setTaskEmail(EmailTaskVo vo);
......
......@@ -46,11 +46,17 @@ public interface IEmailPersonService extends IService<EmailPerson> {
EmailPerson saveEmailSender(OnlineUserDto userDto, EmailContent content, Long folderId, Integer isSend);
//保存发件人2
EmailPerson saveEmailSender(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend);
EmailPerson saveEmailSender2(UserDto userVo, EmailContent content, Long folderId, Integer isSend);
//保存发件人3
EmailPerson saveEmailSender3(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend);
//保存收件人
void saveEmailReceiver(List<UserDto> receiverList, EmailContent content, Long folderId, Integer isPerson, Integer isSend);
//保存收件人2
void saveEmailReceiver2(List<CustomerUserVo> receiverList, EmailContent content, Long folderId, Integer isPerson, Integer isSend);
//移动邮件到文件夹
void moveEmailFolder(EmailFolderMoveVo vo);
......
......@@ -96,14 +96,14 @@ public class EmailContentServiceImpl extends ServiceImpl<EmailContentMapper, Ema
}
@Override
public EmailContent saveContentApi(ApiSendEmailVo emailVo, CustomerUserVo data, List<Long> receiveIds) {
public EmailContent saveContentApi(ApiSendEmailVo emailVo, CustomerUserVo formVo, List<Long> receiveIds) {
EmailContent content = new EmailContent();
content.setTitle(emailVo.getSubject());
content.setContent(emailVo.getContent());
content.setDegree(EmailDegreeEnum.DEGREE_COMMON.getKey());
content.setSendUserId(data.getUserId());
content.setSendUserEmail(data.getUsername());
content.setSendUserName(data.getNickName());
content.setSendUserId(formVo.getUserId());
content.setSendUserEmail(formVo.getUsername());
content.setSendUserName(formVo.getNickName());
content.setSendTime(LocalDateTime.now());
content.setIsTask(WhetherEnum.NO.getKey());
......@@ -122,14 +122,14 @@ public class EmailContentServiceImpl extends ServiceImpl<EmailContentMapper, Ema
}
@Override
public EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formUser) {
public EmailContent saveContentApi2(EmailEditApiVo vo, CustomerUserVo formVo) {
EmailContent content = new EmailContent();
content.setTitle(vo.getTitle());
content.setContent(vo.getContent());
content.setDegree(vo.getDegree());
content.setSendUserId(formUser.getUserId());
content.setSendUserEmail(formUser.getUsername());
content.setSendUserName(formUser.getNickName());
content.setSendUserId(formVo.getUserId());
content.setSendUserEmail(formVo.getUsername());
content.setSendUserName(formVo.getNickName());
content.setSendTime(LocalDateTime.now());
content.setIsTask(vo.getIsTask());
content.setSmsRemind(vo.getIsSmsRemind());
......
......@@ -2,6 +2,7 @@ package com.zq.email.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
......@@ -292,7 +293,28 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
}
@Override
public EmailPerson saveEmailSender(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend) {
public EmailPerson saveEmailSender2(UserDto userVo, EmailContent content, Long folderId, Integer isSend) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_SEND)
.sendTime(content.getSendTime())
.folderId(folderId)
.isRead(WhetherEnum.YES.getKey())
.isPerson(WhetherEnum.YES.getKey())
.isTask(content.getIsTask())
.isSend(isSend)
.build();
this.save(sender);
return sender;
}
@Override
public EmailPerson saveEmailSender3(CustomerUserVo userVo, EmailContent content, Long folderId, Integer isSend) {
EmailPerson sender = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
......@@ -339,6 +361,31 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
}
@Override
public void saveEmailReceiver2(List<CustomerUserVo> receiverList, EmailContent content, Long folderId, Integer isPerson, Integer isSend) {
for (CustomerUserVo userVo : receiverList) {
EmailPerson receivePerson = EmailPerson.builder()
.emailContentId(content.getId())
.userId(userVo.getUserId())
.userEmail(userVo.getUsername())
.userName(userVo.getNickName())
.deptId(userVo.getDeptId())
.courtCode(userVo.getCourtCode())
.personType(EmailConstant.TYPE_EMAIL_RECEIVE)
.sendTime(content.getSendTime())
.folderId(folderId)
.isRead(WhetherEnum.NO.getKey())
.isPerson(isPerson)
.isTask(content.getIsTask())
.isSend(isSend)
.build();
if (isPerson.equals(WhetherEnum.NO.getKey())){
receivePerson.setDeptId(userVo.getDeptId());
}
this.save(receivePerson);
}
}
@Override
public void moveEmailFolder(EmailFolderMoveVo vo) {
List<EmailPerson> list =
this.lambdaQuery()
......@@ -853,97 +900,111 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
Set<UserDto> toUserSet = new LinkedHashSet<>();
Set<CustomerUserVo> toUserSet = new LinkedHashSet<>();
Set<Long> toUserIds= new LinkedHashSet<>();
ResultVo<UserDto> fromVo = adminFeignClient.findByPCode(emailVo.getFrom_id());
AssertUtils.isTrue(fromVo.isSuccess() || fromVo.getData()!=null,"找不到发件人的门户信息");
ResultVo<CustomerUserVo> bypCode = adminFeignClient.getBypCode(emailVo.getFrom_id());
AssertUtils.isTrue(bypCode.isSuccess() || bypCode.getData()!=null,"找不到发件人的门户信息");
CustomerUserVo fromVo = bypCode.getData();
ResultVo<UserDto> toVo =adminFeignClient.findByPCode(emailVo.getTo_id());
AssertUtils.isTrue(toVo.isSuccess() || toVo.getData()!=null,"找不到收件人1的门户信息");
toUserIds.add(toVo.getData().getId());
toUserSet.add(toVo.getData());
ResultVo<CustomerUserVo> bypCode2 =adminFeignClient.getBypCode(emailVo.getTo_id());
AssertUtils.isTrue(bypCode2.isSuccess() || bypCode2.getData()!=null,"找不到收件人1的门户信息");
CustomerUserVo toVo = bypCode2.getData();
toUserIds.add(toVo.getUserId());
toUserSet.add(toVo);
if(StrUtil.isNotBlank(emailVo.getTo_id2())){
ResultVo<UserDto> toVo2 = adminFeignClient.findByPCode(emailVo.getTo_id2());
AssertUtils.isTrue(toVo2.isSuccess() || toVo2.getData()!=null,"找不到收件人2的门户信息");
toUserIds.add(toVo2.getData().getId());
toUserSet.add(toVo2.getData());
}
// EmailContent content = emailContentService.saveContentApi(emailVo, fromVo.getData(), new ArrayList<>(toUserIds));
//
// this.saveEmailSender(fromVo.getData(), content, EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
// //增加收件人
// ArrayList<CustomerUserVo> toUserList = new ArrayList<>(toUserSet);
// this.saveEmailReceiver(toUserList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
// //短信
// //smsUtil.sendBatchSms(toUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
// //代办
// msgUtil.sendMsg(fromVo.getData().getNickName(), content, toUserList, systemInfo, EmailFolderEnum.FOLDER_INBOX.getKey());
// return content;
return null;
ResultVo<CustomerUserVo> bypCode1 = adminFeignClient.getBypCode(emailVo.getTo_id2());
AssertUtils.isTrue(bypCode1.isSuccess() || bypCode1.getData()!=null,"找不到收件人2的门户信息");
CustomerUserVo toVo2 = bypCode2.getData();
toUserIds.add(toVo2.getUserId());
toUserSet.add(toVo2);
}
EmailContent content = emailContentService.saveContentApi(emailVo, fromVo, new ArrayList<>(toUserIds));
this.saveEmailSender3(fromVo, content, EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
//增加收件人
ArrayList<CustomerUserVo> toUserList = ListUtil.toList(toUserSet);
this.saveEmailReceiver2(toUserList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
//短信
smsUtil.sendBatchSms2(toUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
//代办
msgUtil.sendMsg3(fromVo.getNickName(), content, toUserList, systemInfo, EmailFolderEnum.FOLDER_INBOX.getKey());
return content;
}
@Override
public EmailContent sendEmailApi2(EmailEditApiVo vo) {
// ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
// AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务,获取业务系统异常");
// SystemInfo systemInfo = bySystemTag.getData();
// AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
//
// CustomerUserVo formUser = adminFeignClient.getUserById(vo.getSender());
// AssertUtils.notNull(formUser, "获取发送人失败:(sender="+vo.getSender()+")");
// //邮件
// EmailContent content = emailContentService.saveContentApi2(vo, formUser);
// if (content !=null) {
// //person,先删除
// this.lambdaUpdate().eq(EmailPerson::getEmailContentId, content.getId()).remove();
// //发件人
// this.saveEmailSender(formUser, content,EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
// //收件人
// if (CollectionUtil.isNotEmpty(vo.getReceiver())) {
// List<CustomerUserVo> receiverList = new ArrayList<>();
// for (Long userId : vo.getReceiver()) {
// CustomerUserVo receiver = this.adminFeignClient.getUserById(userId);
// AssertUtils.notNull(receiver, "调用admin失败,根据userId获取人员接口异常");
// receiverList.add(receiver);
// }
// if (CollectionUtil.isNotEmpty(receiverList)){
// this.saveEmailReceiver(receiverList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
// if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getSmsRemind().equals(WhetherEnum.YES.getKey())) {
// smsUtil.sendBatchSms(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
// }
// if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getMessageRemind().equals(WhetherEnum.YES.getKey())) {
// msgUtil.sendMsg(formUser.getNickName(), content, receiverList, systemInfo, EmailFolderEnum.FOLDER_INBOX.getKey());
// }
// }
// }
//
// //收件部门人员
//
// if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())) {
// List<CustomerUserVo> deptUserList = new ArrayList<>();
// for (Long deptId : vo.getReceiveDeptList()) {
// ResultVo<List<CustomerUserVo>> userByDeptId = adminFeignClient.getUserByDeptId(deptId);
// AssertUtils.isTrue(userByDeptId.isSuccess(), "调用admin失败,根据deptId获取人员接口异常");
// deptUserList.addAll(userByDeptId.getData());
// }
//
// if (CollectionUtil.isNotEmpty(deptUserList)){
// this.saveEmailReceiver(deptUserList, content, EmailFolderEnum.FOLDER_DEPT_INBOX.getKey().longValue(), WhetherEnum.NO.getKey(), WhetherEnum.YES.getKey());
// if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getSmsRemind().equals(WhetherEnum.YES.getKey())) {
// smsUtil.sendBatchSms(deptUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
// }
// if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getMessageRemind().equals(WhetherEnum.YES.getKey())) {
// msgUtil.sendMsg(formUser.getNickName(), content, deptUserList, systemInfo, EmailFolderEnum.FOLDER_DEPT_INBOX.getKey());
// }
// }
// }
ResultVo<SystemInfo> bySystemTag = this.adminFeignClient.getBySystemTag(EmailConstant.SYSTEM_TAG);
AssertUtils.isTrue(bySystemTag.isSuccess(), "调用admin服务,获取业务系统异常");
SystemInfo systemInfo = bySystemTag.getData();
AssertUtils.notNull(systemInfo, "调用admin服务异常,获取业务系统为空");
CustomerUserVo byId = adminFeignClient.getUserById(vo.getSender());
AssertUtils.isTrue(byId!=null , "获取发送人失败:(sender="+vo.getSender()+")");
//邮件
EmailContent content = emailContentService.saveContentApi2(vo, byId);
if (content !=null) {
//person,先删除
this.lambdaUpdate().eq(EmailPerson::getEmailContentId, content.getId()).remove();
//发件人
this.saveEmailSender3(byId, content,EmailFolderEnum.FOLDER_ALREADY_SEND.getKey().longValue(), WhetherEnum.YES.getKey());
//收件人
if (CollectionUtil.isNotEmpty(vo.getReceiver())) {
List<CustomerUserVo> receiverList = new ArrayList<>();
for (Long userId : vo.getReceiver()) {
CustomerUserVo receiver = this.adminFeignClient.getUserById(userId);
AssertUtils.isTrue(receiver!=null, "调用admin失败,根据userId获取人员接口异常");
receiverList.add(receiver);
}
if (CollectionUtil.isNotEmpty(receiverList)){
this.saveEmailReceiver2(receiverList, content, EmailFolderEnum.FOLDER_INBOX.getKey().longValue(), WhetherEnum.YES.getKey(), WhetherEnum.YES.getKey());
if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getSmsRemind().equals(WhetherEnum.YES.getKey())) {
smsUtil.sendBatchSms2(receiverList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}
if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getMessageRemind().equals(WhetherEnum.YES.getKey())) {
msgUtil.sendMsg3(byId.getNickName(), content, receiverList, systemInfo, EmailFolderEnum.FOLDER_INBOX.getKey());
}
}
}
//收件部门人员
if (CollectionUtil.isNotEmpty(vo.getReceiveDeptList())) {
List<CustomerUserVo> deptUserList = new ArrayList<>();
for (Long deptId : vo.getReceiveDeptList()) {
ResultVo<List<CustomerUserVo>> userByDeptId = adminFeignClient.getUserByDeptId(deptId);
AssertUtils.isTrue(userByDeptId.isSuccess(), "调用admin失败,根据deptId获取人员接口异常");
// deptUserList.add()
// for (CustomerUserVo userVo : userByDeptId.getData()) {
// UserDto userDto = new UserDto();
// userDto.setId(userVo.getUserId());
// userDto.setUsername(userVo.getUsername());
// userDto.setNickName(userVo.getNickName());
// userDto.setDeptId(userVo.getDeptId());
// userDto.setCourtCode(userVo.getCourtCode());
// deptUserList.add(userDto);
// }
// return content;
return null;
deptUserList.addAll(userByDeptId.getData());
}
if (CollectionUtil.isNotEmpty(deptUserList)){
this.saveEmailReceiver2(deptUserList, content, EmailFolderEnum.FOLDER_DEPT_INBOX.getKey().longValue(), WhetherEnum.NO.getKey(), WhetherEnum.YES.getKey());
if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getSmsRemind().equals(WhetherEnum.YES.getKey())) {
smsUtil.sendBatchSms2(deptUserList, "您有一封新的邮件,标题为《" + content.getTitle() + "》。请及时查收。", content.getId());
}
if (vo.getIsSend().equals(WhetherEnum.YES.getKey()) && content.getMessageRemind().equals(WhetherEnum.YES.getKey())) {
msgUtil.sendMsg3(byId.getNickName(), content, deptUserList, systemInfo, EmailFolderEnum.FOLDER_DEPT_INBOX.getKey());
}
}
}
}
return content;
}
@Override
......
......@@ -48,6 +48,25 @@ public class MsgUtil {
}
//发送消息和代办
@Async
public void sendMsg3(String sender, EmailContent content, List<CustomerUserVo> userVoList, SystemInfo systemInfo, Integer folderId) {
Map<String, Object> params = new HashMap<>();
params .put("systemTag", EmailConstant.SYSTEM_TAG);
params .put("sender", sender);
params .put("senderId", content.getSendUserId());
params .put("nickName", sender);
params .put("title","您有一封新邮件提醒");
params .put("content", "请查收我的邮件!主题:"+content.getTitle()+"。");
params.put("userIdList", userVoList.stream().map(e->e.getUserId()).collect(Collectors.toList()));
params .put("businessId", content.getId());
params.put("jumpUrl", systemInfo.getHomeUrl() + "/#/detail?folderId="+folderId+"&contentId=" + content.getId());
log.warn("---发送内部消息打印内容: {}", JSONUtil.toJsonStr(params));
messageFeignClient.sendApi(params);
messageFeignClient.addToDoApi(params);
}
@Async
public void sendMsg2(String sender, EmailContent content, List<Long> userIds, SystemInfo systemInfo, Integer folderId) {
......
......@@ -59,6 +59,34 @@ public class SmsUtil {
}
}
/**
* 发送批量短信
*
* @return
*/
@Async
public void sendBatchSms2(List<CustomerUserVo> userVoList, String content, Long contentId) {
String regex = "^1[3-9]\\d{9}";
StringBuffer sb = new StringBuffer();
for (CustomerUserVo userVo : userVoList) {
if (userVo!=null && StrUtil.isNotBlank(userVo.getPhone()) && userVo.getPhone().matches(regex)){
sb.append(userVo.getPhone()).append(",");
}
}
if (sb.length() >0) {
Map<String, Object> map = new HashMap<>();
map.put("phones", Base64.encode(sb.toString().getBytes()));
map.put("fromId", Base64.encode("oa_email".getBytes()));
map.put("content", Base64.encode(content.getBytes()));
map.put("isReply", Base64.encode("0".getBytes()));
String param = JSONUtil.toJsonStr(map);
sendRequest(Base64.encode(param.getBytes()), contentId);
}
}
private void sendRequest(String content, Long contentId) {
log.debug("发送短信请求 => 邮件标识:{},请求地址:{}", contentId, smsProperties.getUrl());
......
......@@ -14,8 +14,6 @@ spring:
eureka:
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 30 #服务续约(renew)的间隔,默认为30秒
lease-expiration-duration-in-seconds: 90 #服务失效时间,默认值90秒
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
client:
serviceUrl:
......
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!-- 项目名称也是主要日志文件名 -->
<property name="PROJECT_NAME" value="email"/>
<!-- 日志目录 -->
<property name="LOG_PATH" value="/data/logs/${LOG_PATH:-${PROJECT_NAME}}"/>
<!-- 日志格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n"/>
<!-- the name of the application's logging context -->
<!-- by default each JMXConfigurator instance will be registered under the same name in the same JVM -->
<!-- we need to set the contextName for different apps, so that the jmxconfigurator won't collide -->
<contextName>${PROJECT_NAME}</contextName>
<jmxConfigurator/>
<!--主要日志配置 开始-->
<appender name="SIZED_ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<contextName>logback</contextName>
<property name="log.path" value="/data/logs/${LOG_PATH:-${PROJECT_NAME}}"/>
<!--主要日志文件名-->
<property name="default_log_file" value="email"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
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}}"/>
<!--输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
<file>${LOG_PATH}/${PROJECT_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文档保留天数 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- 异步输出 -->
<appender name="MAIN-LOGGER-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="SIZED_ROLLING_FILE"/>
</appender>
<!--主要日志配置 结束-->
<!--DEBUG日志配置 开始-->
<!--输出到文件-->
<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_debug.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<file>${LOG_PATH}/debug.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/debug/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 日志归档 -->
<fileNamePattern>${log.path}/debug/${default_log_file}-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文档保留天数 -->
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<!-- 此日志文件只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出 -->
<appender name="DEBUG-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="DEBUG_FILE"/>
</appender>
<!--DEBUG日志配置 结束-->
<!--INFO日志配置 开始-->
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<file>${LOG_PATH}/info.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/info/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/info/${default_log_file}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文档保留天数 -->
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出 -->
<appender name="INFO-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="INFO_FILE"/>
</appender>
<!--INFO日志配置 结束-->
<!--WARN日志配置 开始-->
<!-- 时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_warn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<file>${LOG_PATH}/warn.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/warn/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<fileNamePattern>${log.path}/warn/${default_log_file}-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文档保留天数 -->
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出 -->
<appender name="WARN-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="WARN_FILE"/>
</appender>
<!--WARN日志配置 结束-->
<!--ERROR错误日志配置 开始-->
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/error.log</file>
<file>${log.path}/log_error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<fileNamePattern>${log.path}/error/${default_log_file}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
......@@ -169,33 +134,18 @@
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出 -->
<appender name="ERROR-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="ERROR_FILE"/>
</appender>
<!--ERROR错误日志配置 结束-->
<root level="INFO">
<!-- 控制台日志输出 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<!-- 全部日志不区分级别 -->
<appender-ref ref="MAIN-LOGGER-APPENDER"/>
<!-- 区分日志级别 -->
<appender-ref ref="DEBUG-APPENDER"/>
<appender-ref ref="INFO-APPENDER"/>
<appender-ref ref="WARN-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
<logger name="com.zq.message" level="DEBUG"/>
<!--开发环境:打印控制台-->
<springProfile name="!dev">
<logger name="com.zq.message.mapper" level="INFO"/>
<logger name="com.zq" level="info"/>
</springProfile>
</configuration>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment