diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java new file mode 100644 index 0000000..000ca5e --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java @@ -0,0 +1,49 @@ +package org.nl.config.lucene; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.core.rolling.RollingFileAppender; +import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.charset.Charset; + +public class DynamicLogAppender { + /** + * 通过传入的动态名字,动态设置appender + * @param dynamicName + * @return + */ + public RollingFileAppender getAppender(String oldLogPath,String dynamicName) { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + RollingFileAppender appender = new RollingFileAppender(); + //appender的name属性 + appender.setName(dynamicName); + appender.setContext(context); + + //设置文件名 + appender.setFile(new File(oldLogPath, dynamicName + "\\" + DateUtil.format(new DateTime(),"yyyy-MM-dd")+".log").getAbsolutePath()); + //设置日志文件输出格式 + PatternLayoutEncoder encoder = new PatternLayoutEncoder(); + encoder.setContext(context); + encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); + encoder.setCharset(Charset.forName("UTF-8")); + encoder.start(); + + //设置日志记录器的滚动策略 + TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy(); + policy.setFileNamePattern(oldLogPath+dynamicName+".%d{yyyy-MM-dd}.log"); + policy.setParent(appender); //设置父节点是appender + policy.setContext(context); + policy.start(); + + //加入下面两个节点 + appender.setRollingPolicy(policy); + appender.setEncoder(encoder); + appender.start(); + return appender; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java new file mode 100644 index 0000000..566a899 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java @@ -0,0 +1,35 @@ +package org.nl.config.lucene; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.rolling.RollingFileAppender; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +public class DynamicLogger { + String logPath;//日志存储路径 + public DynamicLogger(String logPath) { + this.logPath = logPath; + } + //对外暴露日志对象:每次拿的对象从内存里拿,没有再构建 + private static Map container = new HashMap<>(); + public Logger getLogger(String dynamicName) { + Logger logger = container.get(dynamicName); + if(logger != null) { + return logger; + } + logger = build(dynamicName); + container.put(dynamicName,logger); + return logger; + } + //构建Logger对象,给Logger指定appender + private Logger build(String dynamicName) { + RollingFileAppender runTaskAppender =new DynamicLogAppender().getAppender(this.logPath,dynamicName); + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + Logger logger = context.getLogger(dynamicName); + logger.addAppender(runTaskAppender); + return logger; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java index 62a2ee9..fb739ce 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java @@ -26,16 +26,13 @@ public class LuceneIndexWriter { e.printStackTrace(); } /**当当前线程结束时,自动关闭IndexWriter,使用Runtime对象*/ - Runtime.getRuntime().addShutdownHook(new Thread(){ - @Override - public void run() { - try { - closeIndexWriter(); - } catch (Exception e) { - e.printStackTrace(); - } + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + closeIndexWriter(); + } catch (Exception e) { + e.printStackTrace(); } - }); + })); } /**在线程结束时,自动关闭IndexWriter*/ public static IndexWriter getIndexWriter() { @@ -60,6 +57,4 @@ public class LuceneIndexWriter { timeString = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss.SSS");//格式化后的时间 return timeString; } - - } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java index 6b2e7b4..75284ee 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java @@ -5,20 +5,20 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.*; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; -import org.wltea.analyzer.lucene.IKAnalyzer; +import org.apache.lucene.util.BytesRef; import java.nio.file.Paths; -import java.util.*; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Map; /** * lucene查询器 @@ -34,9 +34,9 @@ public class Searcher { IndexSearcher searcher = new IndexSearcher(reader); //标准分词器,会自动去掉空格啊,is a the等单词 // Analyzer analyzer = new StandardAnalyzer(); - Analyzer analyzer = new IKAnalyzer(false); +// Analyzer analyzer = new IKAnalyzer(false); //查询解析器 - QueryParser queryParser = new QueryParser("fieldContent", analyzer); +// QueryParser queryParser = new QueryParser("fieldContent", analyzer); //记录索引开始时间 long startTime = System.currentTimeMillis(); @@ -79,8 +79,16 @@ public class Searcher { 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) { - Query query = queryParser.parse((String) whereJson.get("blurry")); + WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*"+(String) whereJson.get("blurry")+"*")); booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); } docs = searcher.search(booleanQueryBuilder.build(), end,sort); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java index 8379a43..0f5deac 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java @@ -9,13 +9,15 @@ import lombok.extern.slf4j.Slf4j; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; -import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.nl.common.enums.LogTypeEnum; +import org.nl.config.lucene.DynamicLogger; import org.nl.config.lucene.LuceneIndexWriter; import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.lucene.dto.LuceneLogDto; +import org.slf4j.Logger; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; @@ -30,6 +32,10 @@ import java.io.IOException; @Slf4j public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { + //日志目录 + @Value("${logging.file.path}") + private String logPath; + @Override public void deviceItemValue(String device_code, String key, String value) { String now = DateUtil.now(); @@ -61,7 +67,7 @@ public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { // document.add(new TextField("device_code", luceneLogDto.getDevice_code(), Field.Store.YES)); } if (ObjectUtil.isNotEmpty(luceneLogDto.getContent())) { - document.add(new TextField("fieldContent", luceneLogDto.getContent(), Field.Store.YES)); + document.add(new StringField("fieldContent", luceneLogDto.getContent(), Field.Store.YES)); } if (ObjectUtil.isNotEmpty(luceneLogDto.getMethod())) { document.add(new StringField("method", luceneLogDto.getMethod(), Field.Store.YES)); @@ -70,23 +76,24 @@ public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { document.add(new StringField("status_code", luceneLogDto.getStatus_code(), Field.Store.YES)); } if (ObjectUtil.isNotEmpty(luceneLogDto.getRequestparam())) { - document.add(new TextField("requestparam", luceneLogDto.getRequestparam(), Field.Store.YES)); + document.add(new StringField("requestparam", luceneLogDto.getRequestparam(), Field.Store.YES)); } if (ObjectUtil.isNotEmpty(luceneLogDto.getResponseparam())) { - document.add(new TextField("responseparam", luceneLogDto.getResponseparam(), Field.Store.YES)); + document.add(new StringField("responseparam", luceneLogDto.getResponseparam(), Field.Store.YES)); } document.add(new StringField("logType", luceneLogDto.getLogType(), Field.Store.YES)); document.add(new StringField("logTime", DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"), Field.Store.YES)); indexWriter.addDocument(document); //记录索引结束时间 long endTime = System.currentTimeMillis(); - log.info("建立索引共耗时{}毫秒", endTime - startTime); indexWriter.commit(); - MDC.put("DEVICECODE", luceneLogDto.getDevice_code()); + //实现日志文件按业务独立生成日志文件到指定路径 + DynamicLogger loggerBuilder =new DynamicLogger(logPath+"\\"+luceneLogDto.getLogType()+"\\"); + Logger logger = loggerBuilder.getLogger(luceneLogDto.getDevice_code()); +// logger.info("设备{}建立索引共耗时{}毫秒",luceneLogDto.getDevice_code(),endTime-startTime); + logger.info("{}",luceneLogDto.toString()); } catch (Exception e) { log.error(e.getMessage(), e); - } finally { -// MDC.remove("DEVICECODE"); } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index 1eb6370..0f45bf8 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -67,7 +67,6 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List query(MenuQuery query, PageQuery page) { - luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder().log_type("we").device_code("sd").content("saf").build()); if (StringUtils.isNotEmpty(query.getBlurry())){ query.setPid(null); }