Parcourir la source

新增学习考试日志

zhb.dong il y a 1 an
Parent
commit
70f64660de

+ 23 - 0
zd-modules/zd-exam/pom.xml

@@ -107,6 +107,29 @@
             <artifactId>spring-mock</artifactId>
             <version>2.0.8</version>
         </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-access</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-toolkit-logback-1.x</artifactId>
+            <version>8.3.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 27 - 0
zd-modules/zd-exam/src/main/java/com/zd/exam/config/TraceInterceptor.java

@@ -0,0 +1,27 @@
+package com.zd.exam.config;
+
+import org.slf4j.MDC;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * @author Administrator
+ */
+public class TraceInterceptor implements HandlerInterceptor {
+    private static final String TRACE_ID_HEADER = "X-Trace-Id";
+    private static final String TRACE_ID = "traceId";
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        String traceId = request.getHeader(TRACE_ID_HEADER);
+        MDC.put(TRACE_ID, traceId);
+        return true;
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+        MDC.remove(TRACE_ID);
+    }
+}

+ 16 - 0
zd-modules/zd-exam/src/main/java/com/zd/exam/config/WebAppConfig.java

@@ -0,0 +1,16 @@
+package com.zd.exam.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+/**
+ * @author Administrator
+ */
+@Configuration
+public class WebAppConfig extends WebMvcConfigurerAdapter {
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(new TraceInterceptor()).addPathPatterns("/**");
+    }
+}

+ 6 - 3
zd-modules/zd-exam/src/main/java/com/zd/exam/service/convert/ConvertTimingService.java

@@ -79,7 +79,7 @@ public class ConvertTimingService {
         Long points = 0L;
         try {
             ElConvertRecord convertRecord = elConvertRecordMapper.selectElConvertRecordById(id);
-
+            logger.info("doConvertById begins,id:{},convertRecord:{}",id,JSONUtil.toJsonStr(convertRecord));
             if(convertRecord != null){
 
                 if(convertRecord.getStatus() == 1){
@@ -88,21 +88,22 @@ public class ConvertTimingService {
                 }else {
                     // 查询奖励分配置规则
                     List<ElScoreRewardconfig> scoreRewardconfigs = scoreRewardconfigService.selectElScoreRewardconfigList(null);
+                    logger.info("scoreRewardconfig success,configs:{}",JSONUtil.toJsonStr(scoreRewardconfigs));
                     if(CollectionUtils.isEmpty(scoreRewardconfigs)){
                         throw new ServiceException("未查询到奖励分配置规则");
                     }
-
                     points = doObtainBonusPoints(scoreRewardconfigs.get(0), convertRecord);
                 }
             }
         }catch (Exception e){
-            logger.error("doConvertById: error" + e.getMessage());
+            logger.error("doConvertById: error:{}",e.getMessage(),e);
         }
 
         return points;
     }
 
     private Long doObtainBonusPoints(ElScoreRewardconfig scoreRewardconfig, ElConvertRecord convertRecord){
+        logger.info("doObtainBonusPoints begins,scoreRewardconfig:{}",JSONUtil.toJsonStr(scoreRewardconfig));
         Map<String,Object> obtainBonusPoints = new HashMap<>();
         String channelType = "";
         String reason = "";
@@ -123,6 +124,7 @@ public class ConvertTimingService {
         // 学习时长 除法取余
         Long learnRule = scoreRewardconfig.getStudyLen();
 
+
         // 暂时只处理 非遗留的换算
         if(convertRecord.getParentId() == null){
             // deductPoints 奖励分计算并 取余数值保留用作下次计算
@@ -176,6 +178,7 @@ public class ConvertTimingService {
 
             // 奖励的原因
             obtainBonusPoints.put("reason", reason);
+            logger.info("doObtainBonusPoints ,obtainBonusPoints:{}",JSONUtil.toJsonStr(obtainBonusPoints));
             if(deductPoints > 0){
                 // 兑换成功才保存
                 if(pointsRecordService.obtainBonusPoints(obtainBonusPoints) == 200){

+ 9 - 3
zd-modules/zd-exam/src/main/java/com/zd/exam/service/impl/ElChapterLearnRecordServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zd.exam.service.impl;
 
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.security.TokenService;
 import com.zd.common.core.utils.DateUtils;
@@ -172,7 +173,9 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
      */
     @Override
     public Map<String, Object> learnFinish(ElChapterLearnRecord learnRecord) {
+        logger.info("learnFinish begins,param:{}", JSON.toJSONString(learnRecord));
         List<ElChapterLearnRecord> list = selectElChapterLearnRecordList(learnRecord);
+        logger.info("query ElChapterLearn list success,list:{}", JSON.toJSONString(list));
         if(list!=null && !list.isEmpty() && list.size() > 1){
             // 根据  课程,章节,用户,应该只能查一条数据,否则数据异常
             throw new ServiceException("数据异常,请联系管理员!");
@@ -183,6 +186,7 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
             learnRecord.setStatus(1);
 
             ElCourseChapter chapter = elCourseChapterMapper.selectElCourseChapterById(learnRecord.getChapterId());
+            logger.info("query ElCourseChapter success,chapter:{}", JSON.toJSONString(chapter));
             learnRecord.setDuration(chapter.getDuration());
             elChapterLearnRecordMapper.updateElChapterLearnRecord(learnRecord);
 
@@ -196,7 +200,7 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
                 elConvertRecord.setBusinessNum(learnRecord.getDuration());
                  elConvertRecord.setStatus(0);
                 elConvertRecord.setUseNum(0L);
-
+                logger.info("insert ElConvert success,elConvertRecord:{}", JSON.toJSONString(elConvertRecord));
                 convertRecordService.insertElConvertRecord(elConvertRecord);
 
                 convertRecordId = elConvertRecord.getId();
@@ -206,6 +210,8 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
 
             //  练习结束 恢复黑名单
             LabBlackConfig blackConfig = bonusPointsService.getBlackTimeArea(learnRecord.getJoinUserId());
+
+            logger.info("select LabBlack Config ,elConvertRecord:{}", JSON.toJSONString(blackConfig));
             Long durations = 0L;
             if(blackConfig != null && blackConfig.getCreateTime() != null && blackConfig.getHandleDay() != null){
                 // 完成学习 根据违规时间范围统计学习时长,并处理
@@ -213,10 +219,10 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
                 // 统计学习时长
                 durations = elConvertRecordMapper.selectALLDurationByTime(learnRecord.getJoinUserId(),blackConfig.getCreateTime(), blackConfig.getHandleDay());
                 if(durations > 0){
-
                     Map<String, Object> data = new HashMap<>();
                     data.put("learnStatus", 0);
                     data.put("learnTime", durations);
+                    logger.info("select Duration success,data:{}", JSON.toJSONString(data));
 
                     bonusPointsService.blackCallback(learnRecord.getJoinUserId(), data, 3);
                 }
@@ -230,7 +236,7 @@ public class ElChapterLearnRecordServiceImpl implements IElChapterLearnRecordSer
             map.put("durationStr", learnRecord.getDurationStr());
             map.put("durations", durations);
 
-            logger.error(learnRecord.getChapterId() + "章节学习完成,返回数据:" + JSONUtil.toJsonStr(map));
+            logger.info("{}章节学习完成,返回数据:{}", learnRecord.getChapterId(), JSONUtil.toJsonStr(map));
             return map;
         }else {
             throw new ServiceException("未查询到学习记录,请返回重试!");

+ 4 - 0
zd-modules/zd-exam/src/main/java/com/zd/exam/service/impl/ElPointsRecordServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zd.exam.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.zd.common.core.annotation.DataScope;
@@ -14,6 +15,7 @@ import com.zd.exam.mapper.*;
 import com.zd.exam.service.IElPointsRecordService;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.enums.PointRecordType;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -361,6 +363,7 @@ public class ElPointsRecordServiceImpl implements IElPointsRecordService {
         int flag=500;
         //查看积分列表当前用户是否存在
         if(elPointsRecordsList!=null && !elPointsRecordsList.isEmpty()){
+            log.info("get point record success,records:{}", JSONUtil.toJsonStr(elPointsRecordsList));
             //修改日志列表,计算分值
             ElPointsRecord elPointsRecordOld = elPointsRecordsList.get(0);
             Long creditScore = elPointsRecordOld.getBonusPoints()+Long.parseLong(obtainBonusPoints.get("deductPoints")+"");
@@ -387,6 +390,7 @@ public class ElPointsRecordServiceImpl implements IElPointsRecordService {
             elPointsLoginfo.setCreateTime(new Date());
             elPointsLogInfoMapper.insertElPointsLogInfo(elPointsLoginfo);
             flag = 200;
+            log.info("get reward points success,info:{}", JSONUtil.toJsonStr(elPointsLoginfo));
         }
         return flag;
     }

+ 14 - 0
zd-modules/zd-exam/src/main/resources/bootstrap.yml

@@ -16,3 +16,17 @@ mybatis:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     # Mybatis开启驼峰映射
     mapUnderscoreToCamelCase: true
+
+## 日志配置
+logging:
+  level:
+    org:
+      springframework:
+        cloud: WARN
+        security: WARN
+        web: WARN
+      apache:
+        http: WARN
+    com:
+      zd:
+        exam: INFO

+ 132 - 0
zd-modules/zd-exam/src/main/resources/logback.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="30 seconds">
+	<jmxConfigurator />
+
+	<include
+		resource="org/springframework/boot/logging/logback/defaults.xml" />
+
+	<property name="LOG_HOME" value="/data-disk/zd_service/zd-logs/zd-exam" />
+<!--	<property name="LOG_HOME" value="zd-logs/zd-modules-laboratory" />-->
+	<property name="TRACE_ID" value="%X{traceId}"/>
+
+	<property name="TRACE_LOG_PATTERN"
+		value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([TID - %X{traceId}]){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
+
+	<appender class="ch.qos.logback.core.ConsoleAppender"
+		name="STDOUT">
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE">
+		<file>${LOG_HOME}/spring-boot.log</file>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+			<maxFileSize>256MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+			<!-- 日志总保存量为30GB -->
+			<totalSizeCap>30GB</totalSizeCap>
+			<timeBasedFileNamingAndTriggeringPolicy
+				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<!--文件达到 最大128MB时会被压缩和切割 -->
+				<maxFileSize>256MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+		</rollingPolicy>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+	</appender>
+
+	<appender class="ch.qos.logback.classic.AsyncAppender"
+		name="FILE_ASYNC">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>512</queueSize>
+		<appender-ref ref="FILE" />
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="ERROR_FILE">
+		<file>${LOG_HOME}/error.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="SLOW_SQL_FILE">
+		<file>${LOG_HOME}/sql.slow.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>WARN</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/sql.slow.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="ERROR_SQL_FILE">
+		<file>${LOG_HOME}/sql.exception.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/sql.exception.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<logger additivity="false" level="WARN"
+		name="com.tudou.potato.core.mybatis.interceptor.SqlLogInterceptor">
+		<appender-ref ref="SLOW_SQL_FILE" />
+		<appender-ref ref="ERROR_SQL_FILE" />
+	</logger>
+
+	<root level="INFO">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="FILE_ASYNC" />
+		<appender-ref ref="ERROR_FILE" />
+	</root>
+
+</configuration>

+ 1 - 1
zd-modules/zd-modules-laboratory/src/main/resources/bootstrap.yml

@@ -40,4 +40,4 @@ logging:
         http: WARN
     com:
       zd:
-        gateway: INFO
+        laboratory: INFO