WANG 6 vuotta sitten
vanhempi
commit
ffb4f02c0a

+ 89 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/LogController.java

@@ -0,0 +1,89 @@
+package cn.com.qmth.examcloud.core.basic.api.controller;
+
+import java.util.Map;
+
+import org.slf4j.MDC;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.google.common.collect.Maps;
+
+import cn.com.qmth.examcloud.commons.base.exception.StatusException;
+import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLog;
+import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLogFactory;
+import cn.com.qmth.examcloud.commons.base.util.DateUtil;
+import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 日志服务
+ *
+ * @author WANGWEI
+ * @date 2018年11月30日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+@RestController
+@RequestMapping("${$rmp.ctr.basic}/log")
+public class LogController extends ControllerSupport {
+
+	private static Map<String, ExamCloudLog> loggersHolder = Maps.newConcurrentMap();
+
+	private static Object lock = new Object();
+
+	@ApiOperation(value = "学生客户端日志")
+	@PostMapping("studentClient/{level}/{code}")
+	public String logByStudentClient(@PathVariable String level, @PathVariable String code,
+			@RequestBody String info) {
+		log("STU_CLIENT_LOGGER", level, code, info);
+		return DateUtil.getNowISO();
+	}
+
+	/**
+	 * 写日志
+	 *
+	 * @author WANGWEI
+	 * @param logger
+	 * @param level
+	 * @param code
+	 * @param info
+	 */
+	private void log(String logger, String level, String code, String info) {
+		ExamCloudLog log = getLogger(logger);
+		MDC.put("CODE", code);
+		if ("debug".equalsIgnoreCase(level)) {
+			log.debug(info);
+		} else if ("info".equalsIgnoreCase(level)) {
+			log.info(info);
+		} else if ("error".equalsIgnoreCase(level)) {
+			log.error(info);
+		} else {
+			throw new StatusException("B-500001", "level must be [debug,info,error]");
+		}
+	}
+
+	/**
+	 * 获取日志对象
+	 *
+	 * @author WANGWEI
+	 * @param logger
+	 * @return
+	 */
+	private ExamCloudLog getLogger(String logger) {
+		ExamCloudLog log = loggersHolder.get(logger);
+		if (null == log) {
+			synchronized (lock) {
+				if (null == log) {
+					log = ExamCloudLogFactory.getLog(logger);
+					loggersHolder.put(logger, log);
+				}
+				return log;
+			}
+		} else {
+			return log;
+		}
+	}
+
+}

+ 20 - 2
examcloud-core-basic-starter/src/main/resources/logback-spring.xml

@@ -16,7 +16,7 @@
 			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}| %level | %X{TRACE_ID} - %X{KEY} | %m | [%class:%line]%n</pattern>
 		</encoder>
 		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<fileNamePattern>./logs/debug/core.basic.debug.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
+			<fileNamePattern>./logs/debug/core.basic.debug.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
 			<maxHistory>100</maxHistory>
 			<maxFileSize>100MB</maxFileSize>
 		</rollingPolicy>
@@ -29,7 +29,20 @@
 			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}| %level | %X{TRACE_ID} - %X{KEY} | %m%n</pattern>
 		</encoder>
 		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<fileNamePattern>./logs/interface/core.basic.interface.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
+			<fileNamePattern>./logs/interface/core.basic.interface.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
+			<maxHistory>100</maxHistory>
+			<maxFileSize>100MB</maxFileSize>
+		</rollingPolicy>
+	</appender>
+	
+	<!-- 网考学生端日志 -->
+	<appender name="STUDENT_CLIENT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>./logs/student/student.log</file>
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}| %level | %X{KEY} | %X{CODE} | %m%n</pattern>
+		</encoder>
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>./logs/student/student.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
 			<maxHistory>100</maxHistory>
 			<maxFileSize>100MB</maxFileSize>
 		</rollingPolicy>
@@ -44,6 +57,11 @@
 		<appender-ref ref="INTERFACE_APPENDER" />
 		<appender-ref ref="STDOUT" />
 	</logger>
+	
+	<logger name="STU_CLIENT_LOGGER" level="DEBUG" additivity="false">
+		<appender-ref ref="STUDENT_CLIENT_APPENDER" />
+		<appender-ref ref="STDOUT" />
+	</logger>
 
 	<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="${logLevel}" />
 	<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="${logLevel}" />