日志修改

This commit is contained in:
GUO 2024-06-01 14:37:49 +08:00
parent d8ce26b057
commit b9debfecd0
12 changed files with 188 additions and 101 deletions

View File

@ -3,12 +3,10 @@ package com.zhgd.config;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zhgd.mybatis.DataScopeHandler; import com.zhgd.mybatis.DataScopeHandler;
import com.zhgd.mybatis.DataScopeInterceptor; import com.zhgd.mybatis.DataScopeInterceptor;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
@ -43,7 +41,7 @@ public class DataSourceOneConfig {
//开启驼峰 //开启驼峰
MybatisConfiguration configuration = new MybatisConfiguration(); MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true); configuration.setMapUnderscoreToCamelCase(true);
configuration.setLogImpl(StdOutImpl.class); configuration.setLogImpl(StdOutImplCustom.class);
bean.setConfiguration(configuration); bean.setConfiguration(configuration);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/zhgd/xmgl/**/*.xml")); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/zhgd/xmgl/**/*.xml"));
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zhgd.xmgl.tenant.TenantHandler; import com.zhgd.xmgl.tenant.TenantHandler;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
@ -21,7 +20,6 @@ import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
@Configuration @Configuration
@ -43,7 +41,7 @@ public class DataSourceTwoConfig {
//开启驼峰 //开启驼峰
MybatisConfiguration configuration = new MybatisConfiguration(); MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true); configuration.setMapUnderscoreToCamelCase(true);
configuration.setLogImpl(StdOutImpl.class); configuration.setLogImpl(StdOutImplCustom.class);
bean.setConfiguration(configuration); bean.setConfiguration(configuration);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/wflow/**/*.xml")); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/wflow/**/*.xml"));
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

View File

@ -0,0 +1,17 @@
package com.zhgd.config;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
public class LogPrintFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (StdOutImplCustom.isPrint()) {
return FilterReply.ACCEPT;
} else {
return FilterReply.DENY;
}
}
}

View File

@ -0,0 +1,63 @@
package com.zhgd.config;
import com.zhgd.xmgl.config.TaskAspect;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.util.ThreadLocalUtil;
import org.apache.ibatis.logging.Log;
import java.util.Objects;
import java.util.Optional;
public class StdOutImplCustom implements Log {
public StdOutImplCustom(String clazz) {
// Do Nothing
}
public static Boolean isPrint() {
if (!Objects.equals(TaskAspect.onlyPrintInterface, 1)) {
return true;
}
return Optional.ofNullable(ThreadLocalUtil.getByKey(Cts.IF_FROM_TASK_KEY, Boolean.class)).map(b -> !b).orElse(true);
}
@Override
public boolean isDebugEnabled() {
return isPrint();
}
@Override
public boolean isTraceEnabled() {
return isPrint();
}
@Override
public void error(String s, Throwable e) {
System.err.println(s);
e.printStackTrace(System.err);
}
@Override
public void error(String s) {
System.err.println(s);
}
@Override
public void debug(String s) {
if (isPrint()) {
System.out.println(s);
}
}
@Override
public void trace(String s) {
if (isPrint()) {
System.out.println(s);
}
}
@Override
public void warn(String s) {
System.out.println(s);
}
}

View File

@ -15,7 +15,7 @@ public class LogInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("--------------------------------请求url{}--------------------------------", request.getRequestURL()); log.info("请求url{}--------------------------------", request.getRequestURL());
return true; return true;
} }
@ -26,4 +26,4 @@ public class LogInterceptor implements HandlerInterceptor {
@Override @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
} }
} }

View File

@ -78,7 +78,6 @@ import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
@Slf4j @Slf4j
@RestController @RestController
@ -524,83 +523,81 @@ public class HikvisionCall {
@Async("getDoorEvents") @Async("getDoorEvents")
public void getDoorEventsAsync(String startTime, String endTime, JSONObject param, String projectSn, List<Project> projects) { public void getDoorEventsAsync(String startTime, String endTime, JSONObject param, String projectSn, List<Project> projects) {
CompletableFuture.runAsync(() -> { for (Project project : projects) {
for (Project project : projects) { List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>() .eq(UfaceDev::getProjectSn, project.getProjectSn()));
.eq(UfaceDev::getProjectSn, project.getProjectSn())); for (UfaceDev ufaceDev : ufaceDevs) {
for (UfaceDev ufaceDev : ufaceDevs) { param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn()));
param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn())); param.put(pageNo, 0);
param.put(pageNo, 0); param.put("pageSize", 1000);
param.put("pageSize", 1000); Integer total = 0;
Integer total = 0; JSONArray listJa = new JSONArray();
JSONArray listJa = new JSONArray(); do {
do { String rs = null;
String rs = null; param.put("pageNo", param.getIntValue("pageNo") + 1);
param.put("pageNo", param.getIntValue("pageNo") + 1); try {
try { rs = getDoorEventsForHttp(project, param);
rs = getDoorEventsForHttp(project, param); } catch (Exception e) {
} catch (Exception e) { log.error("err:", e);
log.error("err:", e); return;
return; }
} JSONObject joData = HikvisionUtil.getJSONObjectData(rs);
JSONObject joData = HikvisionUtil.getJSONObjectData(rs); if (joData != null) {
if (joData != null) { total = joData.getInteger("total");
total = joData.getInteger("total"); if (!Objects.equals(total, 0)) {
if (!Objects.equals(total, 0)) { listJa = joData.getJSONArray("list");
listJa = joData.getJSONArray("list"); for (int i = 0; i < listJa.size(); i++) {
for (int i = 0; i < listJa.size(); i++) { JSONObject listJo = listJa.getJSONObject(i);
JSONObject listJo = listJa.getJSONObject(i); String eventTime = listJo.getString("eventTime");
String eventTime = listJo.getString("eventTime"); String personId = listJo.getString("personId");
String personId = listJo.getString("personId"); String personName = listJo.getString("personName");
String personName = listJo.getString("personName"); String doorIndexCode = listJo.getString("doorIndexCode");
String doorIndexCode = listJo.getString("doorIndexCode"); String picUri = listJo.getString("picUri");
String picUri = listJo.getString("picUri"); String svrIndexCode = listJo.getString("svrIndexCode");
String svrIndexCode = listJo.getString("svrIndexCode"); WorkerInfo workerInfo = workerInfoMapper.selectById(personId);
WorkerInfo workerInfo = workerInfoMapper.selectById(personId); if (workerInfo == null) {
if (workerInfo == null) { log.error("未找到该人员信息,personName:{}", personName);
log.error("未找到该人员信息,personName:{}", personName); continue;
continue;
}
HashMap<String, Object> map = new HashMap<>();
String time = DateUtil.formatDateTime(DateUtil.parse(eventTime));
map.put("passTime", time);
map.put("idCard", workerInfo.getIdCard());
map.put("attendanceNumber", workerInfo.getAttendanceNumber());
int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time);
map.put("direction", passType);
map.put("passType", 2);
map.put("projectCode", workerInfo.getProjectSn());
map.put("devCode", doorIndexCode);
Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper<WorkerAttendance>()
.eq(WorkerAttendance::getCreateTime, time)
.eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn())
);
if (count != 0) {
log.info("重复的人员通行的数据不保存idCard{},time:{}", workerInfo.getIdCard(), time);
return;
}
try {
HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq();
rq.setPicUri(picUri);
rq.setSvrIndexCode(svrIndexCode);
map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
} catch (Exception e) {
log.error("主动获取人脸图片失败>", e);
}
workerAttendanceService.saveExternalPassRecord(map);
} }
HashMap<String, Object> map = new HashMap<>();
String time = DateUtil.formatDateTime(DateUtil.parse(eventTime));
map.put("passTime", time);
map.put("idCard", workerInfo.getIdCard());
map.put("attendanceNumber", workerInfo.getAttendanceNumber());
int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time);
map.put("direction", passType);
map.put("passType", 2);
map.put("projectCode", workerInfo.getProjectSn());
map.put("devCode", doorIndexCode);
Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper<WorkerAttendance>()
.eq(WorkerAttendance::getCreateTime, time)
.eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn())
);
if (count != 0) {
log.info("重复的人员通行的数据不保存idCard{},time:{}", workerInfo.getIdCard(), time);
return;
}
try {
HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq();
rq.setPicUri(picUri);
rq.setSvrIndexCode(svrIndexCode);
map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
} catch (Exception e) {
log.error("主动获取人脸图片失败>", e);
}
workerAttendanceService.saveExternalPassRecord(map);
} }
} }
} while (total > param.getInteger(pageNo) * 1000); }
} } while (total > param.getInteger(pageNo) * 1000);
try {
workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn);
} catch (Exception e) {
log.error("主动更新在场人员失败,projectSn:{},>", projectSn, e);
}
} }
log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成startTime{}endTime{}", startTime, endTime); try {
}); workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn);
} catch (Exception e) {
log.error("主动更新在场人员失败,projectSn:{},>", projectSn, e);
}
}
log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成startTime{}endTime{}", startTime, endTime);
} }
@ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST") @ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST")

View File

@ -1,6 +1,8 @@
package com.zhgd.xmgl.config; package com.zhgd.xmgl.config;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.util.RequestIdUtil; import com.zhgd.xmgl.util.RequestIdUtil;
import com.zhgd.xmgl.util.ThreadLocalUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
@ -8,6 +10,7 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -18,6 +21,12 @@ import java.util.Map;
@Component @Component
@Slf4j @Slf4j
public class TaskAspect { public class TaskAspect {
public static Integer onlyPrintInterface;
@Value("${onlyPrintInterface:0}")
public void setOnlyPrintInterface(Integer onlyPrintInterface) {
TaskAspect.onlyPrintInterface = onlyPrintInterface;
}
@Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)") @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
public void servicePointcut() { public void servicePointcut() {
@ -36,7 +45,8 @@ public class TaskAspect {
if (null == context) { if (null == context) {
RequestIdUtil.setRequestId("-t"); //主线程没有MDC就自己生成一个 RequestIdUtil.setRequestId("-t"); //主线程没有MDC就自己生成一个
log.info("task方法开始:{}",methodName); ThreadLocalUtil.addInKey(Cts.IF_FROM_TASK_KEY, true);
log.info("task方法开始:{}", methodName);
} }
// 获取方法所有参数及其类型 // 获取方法所有参数及其类型
@ -50,16 +60,17 @@ public class TaskAspect {
Scheduled annotation = method.getAnnotation(Scheduled.class); Scheduled annotation = method.getAnnotation(Scheduled.class);
// 获取注解标识值与注解描述 // 获取注解标识值与注解描述
// String value = annotation.value(); // String value = annotation.value();
// String desc = annotation.description(); // String desc = annotation.description();
// 执行目标方法 // 执行目标方法
Object proceed = jointPoint.proceed(); Object proceed = jointPoint.proceed();
} }
} finally { } finally {
if (null == context) { if (null == context) {
log.info("task方法结束{}",methodName); log.info("task方法结束{}", methodName);
RequestIdUtil.clear(); RequestIdUtil.clear();
ThreadLocalUtil.remove();
} }
} }
} }

View File

@ -24,4 +24,5 @@ public interface Cts {
String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data"; String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data";
String TYPE = "type"; String TYPE = "type";
String TEAM_ID = "teamId"; String TEAM_ID = "teamId";
String IF_FROM_TASK_KEY = "ifFromTaskKey";
} }

View File

@ -168,12 +168,12 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
*/ */
@Override @Override
public void compareRetryFail() { public void compareRetryFail() {
JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY); // JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY);
if (tlJo != null) { // if (tlJo != null) {
XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class); // XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class);
data.setSyncResult(2); // data.setSyncResult(2);
xzHikvisionCompareDataMapper.updateById(data); // xzHikvisionCompareDataMapper.updateById(data);
} // }
} }
/** /**
@ -181,11 +181,11 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
*/ */
@Override @Override
public void compareRetrySuc() { public void compareRetrySuc() {
JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY); // JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY);
if (tlJo != null) { // if (tlJo != null) {
XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class); // XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class);
xzHikvisionCompareDataMapper.deleteById(data.getId()); // xzHikvisionCompareDataMapper.deleteById(data.getId());
} // }
} }
@Override @Override

View File

@ -25,11 +25,11 @@ public class ThreadLocalUtil {
return get(); return get();
} }
public static JSONObject getByKey(String key) { public static <T> T getByKey(String key, Class<T> clz) {
if (get() == null) { if (get() == null) {
return null; return null;
} }
return get().getJSONObject(key); return (T) get().get(key);
} }
public static void add(JSONObject str) { public static void add(JSONObject str) {

View File

@ -30,7 +30,7 @@ mybatis-plus.configuration.call-setters-on-nulls=true
spring.jackson.defaultPropertyInclusion=ALWAYS spring.jackson.defaultPropertyInclusion=ALWAYS
# mybatis 配置 # mybatis 配置
mybatis-plus.mapper-locations=classpath*:com/zhgd/xmgl/**/*.xml,classpath*:com/zhwl/zw/**/*.xml mybatis-plus.mapper-locations=classpath*:com/zhgd/xmgl/**/*.xml,classpath*:com/zhwl/zw/**/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis-plus.configuration.log-impl=com.zhgd.config.StdOutImplCustom
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
#mybatis-plus.global-config.db-config.logic-delete-field=flag #mybatis-plus.global-config.db-config.logic-delete-field=flag
mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-delete-value=1

View File

@ -6,8 +6,10 @@
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符--> <!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%X{requestId}][%thread] %highlight(%-5level) %method:%L %cyan(%logger{50}) - %highlight(%msg) %n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%highlight(%X{requestId})][%thread] %highlight(%-5level) %cyan(%logger{50}).%method:%L - %highlight(%msg) %n</pattern>
</encoder> </encoder>
<filter class="com.zhgd.config.LogPrintFilter">
</filter>
</appender> </appender>
<!-- 时间滚动输出 level为 DEBUG 日志 --> <!-- 时间滚动输出 level为 DEBUG 日志 -->