opt:日志优化2
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
package org.nl.common.lucene;
|
||||||
|
/**
|
||||||
|
* @author ldjun
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2023年08月24日 13:00
|
||||||
|
* @desc desc
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
|
import ch.qos.logback.classic.spi.LoggingEvent;
|
||||||
|
import ch.qos.logback.core.AppenderBase;
|
||||||
|
import com.alibaba.ttl.TransmittableThreadLocal;
|
||||||
|
import com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
|
import org.apache.lucene.document.*;
|
||||||
|
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.common.domain.Property;
|
||||||
|
import org.nl.common.utils.YmlConfigFileUtil;
|
||||||
|
import org.slf4j.MDC;
|
||||||
|
import org.wltea.analyzer.lucene.IKAnalyzer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class AsyncLuceneAppender extends AspectLogbackAsyncAppender {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void append(ILoggingEvent event) {
|
||||||
|
String traceId = LuceneAppender.traceIdTL.get();
|
||||||
|
if (StringUtils.isNotEmpty(traceId)){
|
||||||
|
MDC.put("traceId",traceId);
|
||||||
|
Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
|
||||||
|
if (mdcPropertyMap.getClass().getName().contains("SynchronizedMap")){
|
||||||
|
mdcPropertyMap.put("traceId",traceId);
|
||||||
|
}
|
||||||
|
MDC.clear();
|
||||||
|
}
|
||||||
|
super.append(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ import org.wltea.analyzer.lucene.IKAnalyzer;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
||||||
@@ -63,21 +64,16 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
|||||||
for (Property property : this.properties.getProperties()) {
|
for (Property property : this.properties.getProperties()) {
|
||||||
LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context);
|
LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context);
|
||||||
String encode = encoder.encode(event);
|
String encode = encoder.encode(event);
|
||||||
if (property.getName().equals("traceId")){
|
|
||||||
if (StringUtils.isNotEmpty(encode)){
|
|
||||||
LuceneAppender.traceIdTL.set(encode);
|
|
||||||
}else {
|
|
||||||
encode = LuceneAppender.traceIdTL.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
doc.add(new StringField(property.getName(), encode, Field.Store.YES));
|
doc.add(new StringField(property.getName(), encode, Field.Store.YES));
|
||||||
}
|
}
|
||||||
|
Map<String, String> map = event.getMDCPropertyMap();
|
||||||
|
if (!map.isEmpty() && StringUtils.isNotEmpty(map.get("traceId"))){
|
||||||
|
doc.add(new StringField("traceId",map.get("traceId"), Field.Store.YES));
|
||||||
|
}
|
||||||
|
|
||||||
doc.add(new StringField("traceId",traceIdTL.get(), Field.Store.YES));
|
|
||||||
doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, event.getFormattedMessage(), Field.Store.YES));
|
doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, event.getFormattedMessage(), Field.Store.YES));
|
||||||
doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES));
|
doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES));
|
||||||
doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp()));
|
doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
indexWriter.addDocument(doc);
|
indexWriter.addDocument(doc);
|
||||||
indexWriter.commit();
|
indexWriter.commit();
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package org.nl.common.lucene;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2023/12/26 15:30
|
||||||
|
*/
|
||||||
|
public class Property {
|
||||||
|
private String name;
|
||||||
|
private String value;
|
||||||
|
private boolean allowEmpty;
|
||||||
|
|
||||||
|
public Property() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Property(String name, String value, boolean allowEmpty) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
this.allowEmpty = allowEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllowEmpty() {
|
||||||
|
return allowEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowEmpty(boolean allowEmpty) {
|
||||||
|
this.allowEmpty = allowEmpty;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,9 +78,8 @@ public class LogAspect {
|
|||||||
String requestIp = StringUtils.getIp(request);
|
String requestIp = StringUtils.getIp(request);
|
||||||
MDC.put("requestMethod",url);
|
MDC.put("requestMethod",url);
|
||||||
MDC.put("requestIp", StringUtils.getIp(request));
|
MDC.put("requestIp", StringUtils.getIp(request));
|
||||||
MDC.put("traceId",BaseCode.intToChars(IdUtil.getLongId()));
|
|
||||||
MDC.put("requestTime", DateUtil.now());
|
MDC.put("requestTime", DateUtil.now());
|
||||||
|
LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId()));
|
||||||
Object result = null;
|
Object result = null;
|
||||||
long comming = System.currentTimeMillis();
|
long comming = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -50,11 +50,14 @@ public class LuceneLogController {
|
|||||||
//("清空日志")
|
//("清空日志")
|
||||||
public ResponseEntity<Object> thread(@RequestBody LogQuery query) {
|
public ResponseEntity<Object> thread(@RequestBody LogQuery query) {
|
||||||
log.info("线程链路测试"+Thread.currentThread().getName());
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.error("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
luceneLogService.syncdemo();
|
||||||
Thread thread = new Thread(()->{
|
Thread thread = new Thread(()->{
|
||||||
try {
|
try {
|
||||||
Thread.sleep(10000);
|
Thread.sleep(5000);
|
||||||
log.info("线程链路测试"+Thread.currentThread().getName());
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
log.error("线程链路测试"+Thread.currentThread().getName());
|
log.error("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
}catch (Exception ex){
|
}catch (Exception ex){
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,4 +30,6 @@ public interface LuceneLogService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
JSONObject query(LogQuery logQuery);
|
JSONObject query(LogQuery logQuery);
|
||||||
|
|
||||||
|
void syncdemo();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.lucene.analysis.Analyzer;
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
@@ -26,6 +27,7 @@ import org.nl.modules.logging.service.LuceneLogService;
|
|||||||
import org.nl.modules.logging.service.dto.LogQuery;
|
import org.nl.modules.logging.service.dto.LogQuery;
|
||||||
import org.nl.modules.logging.service.dto.LogRepositoryDTO;
|
import org.nl.modules.logging.service.dto.LogRepositoryDTO;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.wltea.analyzer.lucene.IKAnalyzer;
|
import org.wltea.analyzer.lucene.IKAnalyzer;
|
||||||
@@ -34,6 +36,7 @@ import java.nio.file.Paths;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class LuceneLogServiceImpl implements LuceneLogService {
|
public class LuceneLogServiceImpl implements LuceneLogService {
|
||||||
|
|
||||||
static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"};
|
static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"};
|
||||||
@@ -166,4 +169,14 @@ public class LuceneLogServiceImpl implements LuceneLogService {
|
|||||||
return res;
|
return res;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Async
|
||||||
|
public void syncdemo() {
|
||||||
|
log.info("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.error("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,10 +45,6 @@
|
|||||||
<name>system</name>
|
<name>system</name>
|
||||||
<value>lms</value>
|
<value>lms</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
<property>
|
||||||
<name>logLevel</name>
|
<name>logLevel</name>
|
||||||
<value>%level</value>
|
<value>%level</value>
|
||||||
@@ -75,7 +71,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
</appender>
|
</appender>
|
||||||
<appender name="asyncLuceneAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
<appender name="asyncLuceneAppender" class="org.nl.common.lucene.AsyncLuceneAppender">
|
||||||
<appender-ref ref="luceneAppender" />
|
<appender-ref ref="luceneAppender" />
|
||||||
<queueSize>512</queueSize>
|
<queueSize>512</queueSize>
|
||||||
</appender>
|
</appender>
|
||||||
@@ -89,30 +85,9 @@
|
|||||||
|
|
||||||
<springProfile name="dev3">
|
<springProfile name="dev3">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
<appender-ref ref="asyncLuceneAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
</root>
|
</root>
|
||||||
<logger name="jdbc.audit" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.resultset" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="springfox.documentation" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.resultsettable" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.sqlonly" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.sqltiming" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="org.jinterop" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
</springProfile>
|
</springProfile>
|
||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
|
|||||||
Reference in New Issue
Block a user