From a25a51efa4d1919148105b050b7296ddf818461e Mon Sep 17 00:00:00 2001 From: jiaoliming Date: Fri, 1 Sep 2023 10:32:42 +0800 Subject: [PATCH] rev :lucene Signed-off-by: jiaoliming --- .../lucene/common/DynamicLogAppender.java | 49 +++++++++++ .../modules/lucene/common/DynamicLogger.java | 35 ++++++++ .../lucene/common/LuceneServiceAutoRun.java | 85 +++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogAppender.java create mode 100644 wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogger.java create mode 100644 wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneServiceAutoRun.java diff --git a/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogAppender.java b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogAppender.java new file mode 100644 index 00000000..951a593a --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogAppender.java @@ -0,0 +1,49 @@ +package org.nl.modules.lucene.common; + +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/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogger.java b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogger.java new file mode 100644 index 00000000..e43860b1 --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/DynamicLogger.java @@ -0,0 +1,35 @@ +package org.nl.modules.lucene.common; + +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/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneServiceAutoRun.java b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneServiceAutoRun.java new file mode 100644 index 00000000..8a0a7827 --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneServiceAutoRun.java @@ -0,0 +1,85 @@ +package org.nl.modules.lucene.common; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +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.nl.acs.AcsConfig; +import org.nl.acs.auto.run.AbstractAutoRunnable; +import org.nl.modules.system.service.ParamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.wltea.analyzer.lucene.IKAnalyzer; +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + + +@Slf4j +@Component +public class LuceneServiceAutoRun extends AbstractAutoRunnable { + @Autowired + private ParamService paramService; + + public LuceneServiceAutoRun() { + } + + @Override + public String getCode() { + return LuceneServiceAutoRun.class.getSimpleName(); + } + + @Override + public String getName() { + return "Lucene索引服务"; + } + + private static volatile IndexWriter indexWriter; + + @Override + public void autoRun() throws IOException { + try { + String luceneUrl = paramService.findByCode(AcsConfig.LUCENEURL).getValue(); + Directory directory = FSDirectory.open(new File(luceneUrl).toPath()); + IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer()); + indexWriter = new IndexWriter(directory, config); + } catch (Exception e) { + log.error("Lucene索引服务出现异常:{}", JSON.toJSONString(e)); + if (ObjectUtil.isNotEmpty(indexWriter)) { + indexWriter.close(); + } + } + } + /**在线程结束时,会自动关闭IndexWriter*/ + public static IndexWriter getIndexWriter() { + return indexWriter; + } + + @Override + public void stop() { + super.after(); + try { + indexWriter.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) throws IOException { + indexWriter.deleteAll(); + } + + public static String getDate(String timeString) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");//时间格式 + Date date = sdf.parse(timeString); + timeString = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss.SSS");//格式化后的时间 + return timeString; + } + +}