@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user