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.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
||||
@@ -63,21 +64,16 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
||||
for (Property property : this.properties.getProperties()) {
|
||||
LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context);
|
||||
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));
|
||||
}
|
||||
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 StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES));
|
||||
doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp()));
|
||||
|
||||
try {
|
||||
indexWriter.addDocument(doc);
|
||||
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);
|
||||
MDC.put("requestMethod",url);
|
||||
MDC.put("requestIp", StringUtils.getIp(request));
|
||||
MDC.put("traceId",BaseCode.intToChars(IdUtil.getLongId()));
|
||||
MDC.put("requestTime", DateUtil.now());
|
||||
|
||||
LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId()));
|
||||
Object result = null;
|
||||
long comming = System.currentTimeMillis();
|
||||
try {
|
||||
|
||||
@@ -50,11 +50,14 @@ public class LuceneLogController {
|
||||
//("清空日志")
|
||||
public ResponseEntity<Object> thread(@RequestBody LogQuery query) {
|
||||
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||
log.error("线程链路测试"+Thread.currentThread().getName());
|
||||
luceneLogService.syncdemo();
|
||||
Thread thread = new Thread(()->{
|
||||
try {
|
||||
Thread.sleep(10000);
|
||||
Thread.sleep(5000);
|
||||
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||
log.error("线程链路测试"+Thread.currentThread().getName());
|
||||
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||
}catch (Exception ex){
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -30,4 +30,6 @@ public interface LuceneLogService {
|
||||
* @return
|
||||
*/
|
||||
JSONObject query(LogQuery logQuery);
|
||||
|
||||
void syncdemo();
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||
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.LogRepositoryDTO;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.wltea.analyzer.lucene.IKAnalyzer;
|
||||
@@ -34,6 +36,7 @@ import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class LuceneLogServiceImpl implements LuceneLogService {
|
||||
|
||||
static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"};
|
||||
@@ -166,4 +169,14 @@ public class LuceneLogServiceImpl implements LuceneLogService {
|
||||
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>
|
||||
<value>lms</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>traceId</name>
|
||||
<value>%X{traceId}</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>logLevel</name>
|
||||
<value>%level</value>
|
||||
@@ -75,7 +71,7 @@
|
||||
</property>
|
||||
</properties>
|
||||
</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" />
|
||||
<queueSize>512</queueSize>
|
||||
</appender>
|
||||
@@ -89,30 +85,9 @@
|
||||
|
||||
<springProfile name="dev3">
|
||||
<root level="info">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="asyncLuceneAppender"/>
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</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 name="prod">
|
||||
<root level="info">
|
||||
|
||||
Reference in New Issue
Block a user