diff --git a/mes/hd/nladmin-system/pom.xml b/mes/hd/nladmin-system/pom.xml
index 1d1affdc..2cbc55d4 100644
--- a/mes/hd/nladmin-system/pom.xml
+++ b/mes/hd/nladmin-system/pom.xml
@@ -45,19 +45,50 @@
+
- com.internetitem
- logback-elasticsearch-appender
- 1.6
+ com.yomahub
+ tlog-all-spring-boot-starter
+ 1.5.0
+
+
+ hutool-core
+ cn.hutool
+
+
-
-
- org.springframework.boot
- spring-boot-starter-data-elasticsearch
- 2.7.5
+ org.apache.lucene
+ lucene-core
+ 8.2.0
+
+
+ org.apache.lucene
+ lucene-highlighter
+ 8.2.0
+
+
+ org.apache.lucene
+ lucene-analyzers-common
+ 8.2.0
+
+
+ com.github.magese
+ ik-analyzer
+ 8.2.0
+
+
+
+ org.apache.lucene
+ lucene-analyzers-smartcn
+ 8.2.0
+
+
+
+ org.apache.lucene
+ lucene-queryparser
+ 8.2.0
-
e-iceblue
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java b/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java
index e681aa4e..740d4727 100644
--- a/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java
@@ -25,6 +25,7 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
+import org.nl.config.lucene.LuceneAppender;
import org.nl.modules.system.util.BaseCode;
import org.nl.utils.RequestHolder;
import org.nl.utils.SecurityUtils;
@@ -53,7 +54,10 @@ public class LogAspect {
//org.nl.ext.lk.rest org.nl.pda.pdm.rest
@Pointcut("execution(* org.nl.*.*..rest..*.*(..)) " +
- "&& !execution(* org.nl.pda.pdm.rest.PfScreenController.*(..)) ")
+ "&& !execution(* org.nl.pda.pdm.rest.PfScreenController.*(..)) " +
+ "&& !execution(* org.nl.modules.system.rest.EsLogController.*(..)) "
+ )
+
public void logPointCut() {
}
@@ -65,12 +69,12 @@ public class LogAspect {
String params = getParameter(method, joinPoint.getArgs());
HttpServletRequest request = RequestHolder.getHttpServletRequest();
String url = request.getRequestURI();
-
+ String traceId = BaseCode.intToChars(IdUtil.getSnowflake(1, 1).nextId());
MDC.put("requestMethod",url);
MDC.put("requestIp", StringUtils.getIp(request));
- MDC.put("traceId", BaseCode.intToChars(IdUtil.getSnowflake(1, 1).nextId()));
+ MDC.put("traceId", traceId);
MDC.put("requestTime", DateUtil.now());
-
+ LuceneAppender.traceIdTL.set(traceId);
Object result;
long comming = System.currentTimeMillis();
try {
@@ -94,6 +98,7 @@ public class LogAspect {
}finally {
log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]",url,(System.currentTimeMillis() - comming)/1000);
MDC.clear();
+ LuceneAppender.traceIdTL.remove();
}
return result;
}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java
new file mode 100644
index 00000000..6a0573a5
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java
@@ -0,0 +1,33 @@
+package org.nl.config.lucene;
+/**
+ * @author ldjun
+ * @version 1.0
+ * @date 2023年08月24日 13:00
+ * @desc desc
+ */
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.MDC;
+
+import java.util.Map;
+
+public class AsyncLuceneAppender extends AspectLogbackAsyncAppender {
+
+
+ @Override
+ protected void append(ILoggingEvent event) {
+ String traceId = LuceneAppender.traceIdTL.get();
+ if (StringUtils.isNotEmpty(traceId)){
+ MDC.put("traceId",traceId);
+ Map mdcPropertyMap = event.getMDCPropertyMap();
+ if (mdcPropertyMap.getClass().getName().contains("SynchronizedMap")){
+ mdcPropertyMap.put("traceId",traceId);
+ }
+ MDC.clear();
+ }
+ super.append(event);
+ }
+
+}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LogMessageConstant.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LogMessageConstant.java
new file mode 100644
index 00000000..14ddcca0
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LogMessageConstant.java
@@ -0,0 +1,46 @@
+package org.nl.config.lucene;
+
+/**
+ * @Author: lyd
+ * @Description: 定义lucene相关常量
+ * @Date: 2023/8/25
+ */
+public class LogMessageConstant {
+ /** */
+ public final static String SORT_NAME = "time";
+ /** 级别 */
+ public final static String FIELD_LEVEL = "level";
+ /** 时间 */
+ public final static String FIELD_TIMESTAMP = "timestamp";
+ /** 类的限定名 */
+ public final static String FIELD_CLASS_NAME = "logger";
+ /** 线程名 */
+ public final static String FIELD_THREAD = "thread";
+ /** 日志内容 */
+ public final static String FIELD_MESSAGE = "message";
+ public final static String FIELD_TRACEID = "tlogTraceId";
+ // 定义颜色值
+ /** 文本颜色:黑色 */
+ public final static String COLOR_BLACK = "\u001B[30m";
+ /** 文本颜色:红色 */
+ public final static String COLOR_RED = "\u001B[31m";
+ /** 文本颜色:绿色 */
+ public final static String COLOR_GREEN = "\u001B[32m";
+ /** 文本颜色:黄色 */
+ public final static String COLOR_YELLOW = "\u001B[33m";
+ /** 文本颜色:蓝色 */
+ public final static String COLOR_BLUE = "\u001B[34m";
+ /** 文本颜色:品红色 */
+ public final static String COLOR_MAGENTA = "\u001B[35m";
+ /** 文本颜色:青色 */
+ public final static String COLOR_CYAN = "\u001B[36m";
+ /** 文本颜色:白色 */
+ public final static String COLOR_WHITE = "\u001B[37m";
+ /** 文本颜色重置 */
+ public final static String COLOR_RESET = "\u001B[0m";
+ /** 背景颜色:黄色 */
+ public final static String BACKGROUND_YELLOW = "\u001B[43m";
+ /** 索引路径 */
+ public final static String INDEX_DIR = "E:\\lucene\\index";
+
+}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneAppender.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneAppender.java
new file mode 100644
index 00000000..adb35de0
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneAppender.java
@@ -0,0 +1,98 @@
+package org.nl.config.lucene;
+/**
+ * @author ldjun
+ * @version 1.0
+ * @date 2023年08月24日 13:00
+ * @desc desc
+ */
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+import com.alibaba.ttl.TransmittableThreadLocal;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.document.*;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.wltea.analyzer.lucene.IKAnalyzer;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+public class LuceneAppender extends AppenderBase {
+
+ public static final TransmittableThreadLocal traceIdTL = new TransmittableThreadLocal();
+ public LuceneProperties properties;
+ public static Directory index;
+ private List encoders;
+ public static IndexWriter indexWriter;
+
+
+
+ @Override
+ public void start() {
+ super.start();
+ try {
+ Resource resource = new ClassPathResource("config/application.yml");
+ YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
+ yamlPropertiesFactoryBean.setResources(resource);
+ Properties properties = yamlPropertiesFactoryBean.getObject();
+ String luceneDir = properties.getProperty("lucene.index.path");
+ System.out.println("---index地址----"+luceneDir);
+ index = FSDirectory.open(Paths.get(luceneDir));
+ Analyzer analyzer = new IKAnalyzer();
+ IndexWriterConfig config = new IndexWriterConfig(analyzer);
+ indexWriter = new IndexWriter(index, config);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ protected void append(ILoggingEvent event) {
+ Document doc = new Document();
+ for (Property property : this.properties.getProperties()) {
+ LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context);
+ String encode = encoder.encode(event);
+ doc.add(new StringField(property.getName(), encode, Field.Store.YES));
+ }
+ Map map = event.getMDCPropertyMap();
+ if (!map.isEmpty() && StringUtils.isNotEmpty(map.get("traceId"))){
+ doc.add(new StringField("traceId",map.get("traceId"), Field.Store.YES));
+ }
+
+ doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, event.getFormattedMessage(), Field.Store.YES));
+ doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES));
+ doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp()));
+ try {
+ indexWriter.addDocument(doc);
+ indexWriter.commit();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void stop() {
+ super.stop();
+ try {
+ indexWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void setProperties(LuceneProperties properties) {
+ this.properties = properties;
+
+ }
+}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneProperties.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneProperties.java
new file mode 100644
index 00000000..c0442277
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LuceneProperties.java
@@ -0,0 +1,23 @@
+package org.nl.config.lucene;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LuceneProperties {
+
+ private List properties;
+
+ public LuceneProperties() {
+ this.properties = new ArrayList();
+ }
+
+ public List getProperties() {
+ return properties;
+ }
+
+ public void addProperty(Property property) {
+ properties.add(property);
+ }
+
+}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java
new file mode 100644
index 00000000..7ad3ecfa
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java
@@ -0,0 +1,38 @@
+package org.nl.config.lucene;
+
+import ch.qos.logback.classic.PatternLayout;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.Context;
+import ch.qos.logback.core.pattern.PatternLayoutBase;
+
+/*
+ * @author ZZQ
+ * @Date 2023/12/22 18:11
+ */
+public class LucenePropertyAndEncoder {
+
+ private Property property;
+
+ private PatternLayoutBase layout = new PatternLayout();
+
+ public LucenePropertyAndEncoder(Property property, Context context) {
+ this.property = property;
+ this.layout.setContext(context);
+ this.layout.setPattern(String.valueOf(property.getValue()));
+ this.layout.setPostCompileProcessor(null);
+ this.layout.start();
+ }
+
+ public String encode(ILoggingEvent event) {
+ return layout.doLayout(event);
+ }
+
+ public String getName() {
+ return property.getName();
+ }
+
+ public boolean allowEmpty() {
+ return property.isAllowEmpty();
+ }
+}
+
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/Property.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/Property.java
new file mode 100644
index 00000000..4d33144a
--- /dev/null
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/lucene/Property.java
@@ -0,0 +1,44 @@
+package org.nl.config.lucene;
+
+/*
+ * @author ZZQ
+ * @Date 2023/12/26 15:30
+ */
+public class Property {
+ private String name;
+ private String value;
+ private boolean allowEmpty;
+
+ public Property() {
+ }
+
+ public Property(String name, String value, boolean allowEmpty) {
+ this.name = name;
+ this.value = value;
+ this.allowEmpty = allowEmpty;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public boolean isAllowEmpty() {
+ return allowEmpty;
+ }
+
+ public void setAllowEmpty(boolean allowEmpty) {
+ this.allowEmpty = allowEmpty;
+ }
+}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java
index 5cf6b031..47e6cd5f 100644
--- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java
@@ -2,13 +2,10 @@ package org.nl.modules.system.domain;
import lombok.Data;
import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.annotations.Document;
-
/*
* @author ZZQ
* @Date 2023/2/8 4:06 下午
*/
-@Document(indexName = "#{@ESConfig.index}", type = "whxr_log")
@Data
public class LogRepositoryDTO {
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java
deleted file mode 100644
index 2c67e75e..00000000
--- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.nl.modules.system.repository;
-
-import org.nl.modules.system.domain.LogRepositoryDTO;
-import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
-import org.springframework.stereotype.Repository;
-
-/*
- * @author ZZQ
- * @Date 2023/2/8 4:11 下午
- */
-@Repository
-public interface EsLogRepository extends ElasticsearchRepository {
-
-}
diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/AutoRunController.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/AutoRunController.java
index b4eb1bcd..78189fac 100644
--- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/AutoRunController.java
+++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/AutoRunController.java
@@ -3,7 +3,9 @@ package org.nl.modules.system.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.nl.annotation.Log;
+import org.nl.modules.system.service.dto.LogQuery;
import org.nl.start.auto.run.AutoRunService;
import org.nl.start.auto.run.ThreadDto;
import org.nl.utils.PageUtil;
@@ -23,6 +25,7 @@ import java.util.Map;
@RequestMapping("/api/autorun")
@Api(tags = "系统:查询自动线程")
@RequiredArgsConstructor
+@Slf4j
public class AutoRunController {
@Autowired
@@ -52,4 +55,21 @@ public class AutoRunController {
autoRunService.stopThread(code);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
+
+ @GetMapping("/thread")
+ //("清空日志")
+ public ResponseEntity