rev :lucene

Signed-off-by: jiaoliming <dawnjiao@foxmail.com>
This commit is contained in:
jiaoliming
2023-09-01 10:32:42 +08:00
parent f3e26048f2
commit a25a51efa4
3 changed files with 169 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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<String,Logger> 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;
}
}

View File

@@ -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;
}
}