add:添加lucene定时删除,
opt:优化日志打印,优化设备驱动延时1.5S
This commit is contained in:
@@ -160,6 +160,7 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp
|
|||||||
public void execute() {
|
public void execute() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
Thread.sleep(1500);
|
||||||
this.devicecode = this.getDevice().getDevice_code();
|
this.devicecode = this.getDevice().getDevice_code();
|
||||||
if (this.reqTakeRequireSuccess && ObjectUtil.isNotEmpty(this.reqTakeInstCode)) {
|
if (this.reqTakeRequireSuccess && ObjectUtil.isNotEmpty(this.reqTakeInstCode)) {
|
||||||
Instruction instruction = instructionService.findByCodeFromCache(this.reqTakeInstCode);
|
Instruction instruction = instructionService.findByCodeFromCache(this.reqTakeInstCode);
|
||||||
|
|||||||
@@ -76,9 +76,7 @@ public class LogAspect {
|
|||||||
String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
|
String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
|
||||||
String params = getParameter(method, joinPoint.getArgs());
|
String params = getParameter(method, joinPoint.getArgs());
|
||||||
org.nl.modules.logging.annotation.Log logInfo = method.getAnnotation(org.nl.modules.logging.annotation.Log.class);
|
org.nl.modules.logging.annotation.Log logInfo = method.getAnnotation(org.nl.modules.logging.annotation.Log.class);
|
||||||
|
|
||||||
log.info("接口请求日志----请求方法:{},请求方法参数:{}",methodName, params);
|
log.info("接口请求日志----请求方法:{},请求方法参数:{}",methodName, params);
|
||||||
|
|
||||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||||
String requestIp = StringUtils.getIp(request);
|
String requestIp = StringUtils.getIp(request);
|
||||||
String url = request.getRequestURI();
|
String url = request.getRequestURI();
|
||||||
|
|||||||
@@ -28,109 +28,9 @@ import java.util.*;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class Searcher {
|
public class Searcher {
|
||||||
|
|
||||||
public static Map<String, Object> search(String indexDir, String ext,Map whereJson) throws Exception {
|
|
||||||
//获取要查询的路径,也就是索引所在的位置
|
|
||||||
Directory dir = FSDirectory.open(Paths.get(indexDir));
|
|
||||||
IndexReader reader = DirectoryReader.open(dir);
|
|
||||||
//构建IndexSearcher
|
|
||||||
IndexSearcher searcher = new IndexSearcher(reader);
|
|
||||||
//标准分词器,会自动去掉空格啊,is a the等单词
|
|
||||||
// Analyzer analyzer = new StandardAnalyzer();
|
|
||||||
// Analyzer analyzer = new IKAnalyzer(false);
|
|
||||||
//查询解析器
|
|
||||||
// QueryParser queryParser = new QueryParser("fieldContent", analyzer);
|
|
||||||
|
|
||||||
//记录索引开始时间
|
|
||||||
long startTime = System.currentTimeMillis();
|
|
||||||
// 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数:
|
|
||||||
int pageSize = Integer.parseInt(whereJson.get("size").toString());// 每页条数
|
|
||||||
int pageNum = Integer.parseInt(whereJson.get("page").toString());// 当前页码
|
|
||||||
int start = pageNum * pageSize;// 当前页的起始条数
|
|
||||||
int end = start + pageSize;// 当前页的结束条数(不能包含)
|
|
||||||
// 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序
|
|
||||||
Sort sort = new Sort(new SortField("logTime", SortField.Type.DOC,true));
|
|
||||||
|
|
||||||
TopDocs docs = null;
|
|
||||||
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
|
|
||||||
//时间范围查询
|
|
||||||
String startDate = (String) whereJson.get("begin_time");
|
|
||||||
String endDate = (String) whereJson.get("end_time");
|
|
||||||
Calendar calendar=Calendar.getInstance();
|
|
||||||
calendar.set(1970, 0, 1);
|
|
||||||
if (startDate == null){
|
|
||||||
startDate = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH:mm:ss.SSS");
|
|
||||||
}else{
|
|
||||||
startDate = LuceneIndexWriter.getDate(startDate);
|
|
||||||
}
|
|
||||||
if (endDate == null){
|
|
||||||
endDate = DateUtil.format(new DateTime(),"yyyy-MM-dd HH:mm:ss.SSS");
|
|
||||||
} else {
|
|
||||||
endDate = LuceneIndexWriter.getDate(endDate);
|
|
||||||
}
|
|
||||||
TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true);
|
|
||||||
booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST);
|
|
||||||
if (whereJson.get("device_code") != null){
|
|
||||||
Query termQuery = new TermQuery(new Term("device_code", (String) whereJson.get("device_code")));
|
|
||||||
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
if (whereJson.get("method") != null){
|
|
||||||
Query termQuery = new TermQuery(new Term("method", (String) whereJson.get("method")));
|
|
||||||
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
if (whereJson.get("status_code") != null){
|
|
||||||
Query termQuery = new TermQuery(new Term("status_code", (String) whereJson.get("status_code")));
|
|
||||||
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
if (whereJson.get("requestparam") != null){
|
|
||||||
WildcardQuery query = new WildcardQuery(new Term("requestparam", "*"+(String) whereJson.get("requestparam")+"*"));
|
|
||||||
booleanQueryBuilder.add(query,BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
if (whereJson.get("responseparam") != null){
|
|
||||||
WildcardQuery query = new WildcardQuery(new Term("responseparam", "*"+(String) whereJson.get("responseparam")+"*"));
|
|
||||||
booleanQueryBuilder.add(query,BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
if (whereJson.get("blurry") != null) {
|
|
||||||
WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*"+(String) whereJson.get("blurry")+"*"));
|
|
||||||
booleanQueryBuilder.add(query, BooleanClause.Occur.MUST);
|
|
||||||
}
|
|
||||||
docs = searcher.search(booleanQueryBuilder.build(), end,sort);
|
|
||||||
//记录索引时间
|
|
||||||
long endTime = System.currentTimeMillis();
|
|
||||||
log.info("匹配{}共耗时{}毫秒",booleanQueryBuilder.build(),(endTime-startTime));
|
|
||||||
log.info("查询到{}条日志文件", docs.totalHits.value);
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
ScoreDoc[] scoreDocs = docs.scoreDocs;
|
|
||||||
if (end > docs.totalHits.value) end = (int) docs.totalHits.value;
|
|
||||||
JSONArray array = new JSONArray();
|
|
||||||
|
|
||||||
for (int i = start; i < end; i++) {
|
|
||||||
ScoreDoc scoreDoc = scoreDocs[i];
|
|
||||||
Document doc = reader.document(scoreDoc.doc);
|
|
||||||
JSONObject object = new JSONObject();
|
|
||||||
object.put("content",doc.get("fieldContent"));
|
|
||||||
object.put("device_code",doc.get("device_code"));
|
|
||||||
object.put("logTime",doc.get("logTime"));
|
|
||||||
object.put("method",doc.get("method"));
|
|
||||||
object.put("status_code",doc.get("status_code"));
|
|
||||||
object.put("requestparam",doc.get("requestparam"));
|
|
||||||
object.put("responseparam",doc.get("responseparam"));
|
|
||||||
if(doc.get("fieldContent") != null) {
|
|
||||||
array.add(object);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(Object logDto:array){
|
|
||||||
log.info(logDto.toString());
|
|
||||||
}
|
|
||||||
reader.close();
|
|
||||||
JSONObject jo = new JSONObject();
|
|
||||||
jo.put("content", array);
|
|
||||||
jo.put("totalElements", docs.totalHits.value);
|
|
||||||
return jo;
|
|
||||||
}
|
|
||||||
public static Map<String, Object> search(String indexDir, LuceneQuery query){
|
public static Map<String, Object> search(String indexDir, LuceneQuery query){
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
IndexReader indexReader = null;
|
IndexReader indexReader = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 获取IndexReader
|
// 获取IndexReader
|
||||||
Directory dir = FSDirectory.open(Paths.get(indexDir));
|
Directory dir = FSDirectory.open(Paths.get(indexDir));
|
||||||
@@ -293,15 +193,4 @@ public class Searcher {
|
|||||||
|
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
public static void main(String[] args) {
|
|
||||||
String indexDir = "D:\\lucene\\index";
|
|
||||||
//查询这个字符串
|
|
||||||
String q = "07.832";
|
|
||||||
Map whereJson = null;
|
|
||||||
try {
|
|
||||||
search(indexDir, q,whereJson);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package org.nl.modules.quartz.task;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.lucene.document.LongPoint;
|
||||||
|
import org.apache.lucene.index.IndexWriter;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
import org.nl.modules.lucene.common.LuceneIndexWriter;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定时清理15天前的Lucene日志
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CleanOldLuceneLogs {
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
IndexWriter indexWriter = LuceneIndexWriter.getIndexWriter();
|
||||||
|
// 计算15天前的时间戳(毫秒)
|
||||||
|
Date fifteenDaysAgo = DateUtil.offsetDay(new Date(), -15);
|
||||||
|
long timestamp = fifteenDaysAgo.getTime();
|
||||||
|
// 构建范围查询:删除logTime小于15天前时间戳的日志
|
||||||
|
Query query = LongPoint.newRangeQuery("logTime", 0L, timestamp);
|
||||||
|
// 执行删除操作
|
||||||
|
indexWriter.deleteDocuments(query);
|
||||||
|
indexWriter.commit();
|
||||||
|
log.info("成功清理15天前的Lucene日志,清理时间点: {}", DateUtil.format(fifteenDaysAgo, "yyyy-MM-dd HH:mm:ss"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("清理Lucene日志失败", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,15 +6,15 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||||
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nl5_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true
|
url: jdbc:log4jdbc:mysql://${DB_HOST:172.30.15.231}:${DB_PORT:3306}/${DB_NAME:nl5_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true
|
||||||
username: ${DB_USER:root}
|
username: ${DB_USER:root}
|
||||||
password: ${DB_PWD:123456}
|
password: ${DB_PWD:123456}
|
||||||
# 初始连接数
|
# 初始连接数
|
||||||
initial-size: 5
|
initial-size: 15
|
||||||
# 最小连接数
|
# 最小连接数
|
||||||
min-idle: 15
|
min-idle: 20
|
||||||
# 最大连接数
|
# 最大连接数
|
||||||
max-active: 30
|
max-active: 100
|
||||||
# 超时时间(以秒数为单位)
|
# 超时时间(以秒数为单位)
|
||||||
remove-abandoned-timeout: 180
|
remove-abandoned-timeout: 180
|
||||||
# 获取连接超时时间
|
# 获取连接超时时间
|
||||||
@@ -35,18 +35,12 @@ spring:
|
|||||||
validation-query: select 1
|
validation-query: select 1
|
||||||
# 配置监控统计
|
# 配置监控统计
|
||||||
webStatFilter:
|
webStatFilter:
|
||||||
enabled: true
|
enabled: false
|
||||||
stat-view-servlet:
|
stat-view-servlet:
|
||||||
enabled: true
|
enabled: false
|
||||||
url-pattern: /druid/*
|
|
||||||
reset-enable: false
|
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: false
|
||||||
# 记录慢SQL
|
|
||||||
log-slow-sql: true
|
|
||||||
slow-sql-millis: 1000
|
|
||||||
merge-sql: true
|
|
||||||
wall:
|
wall:
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
|
|
||||||
|
|
||||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
|
<level>WARN</level> <!-- 只输出warn及以上 -->
|
||||||
|
</filter>
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>${log.pattern}</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
<charset>${log.charset}</charset>
|
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user