opt:日志优化
This commit is contained in:
@@ -37,13 +37,41 @@
|
|||||||
<artifactId>tlog-all-spring-boot-starter</artifactId>
|
<artifactId>tlog-all-spring-boot-starter</artifactId>
|
||||||
<version>1.5.0</version>
|
<version>1.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- Lucence核心包 -->
|
||||||
<!-- elasticsearch-->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.apache.lucene</groupId>
|
||||||
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
|
<artifactId>lucene-core</artifactId>
|
||||||
<version>2.7.5</version>
|
<version>8.2.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.lucene</groupId>
|
||||||
|
<artifactId>lucene-highlighter</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.lucene</groupId>
|
||||||
|
<artifactId>lucene-analyzers-common</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.magese</groupId>
|
||||||
|
<artifactId>ik-analyzer</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--支持中文分词 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.lucene</groupId>
|
||||||
|
<artifactId>lucene-analyzers-smartcn</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Lucene查询解析包 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.lucene</groupId>
|
||||||
|
<artifactId>lucene-queryparser</artifactId>
|
||||||
|
<version>8.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- 获取系统信息 -->
|
<!-- 获取系统信息 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.oshi</groupId>
|
<groupId>com.github.oshi</groupId>
|
||||||
@@ -51,12 +79,6 @@
|
|||||||
<version>6.1.4</version>
|
<version>6.1.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- logback appender日志-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.internetitem</groupId>
|
|
||||||
<artifactId>logback-elasticsearch-appender</artifactId>
|
|
||||||
<version>1.6</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.reflections</groupId>
|
<groupId>org.reflections</groupId>
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
package org.nl;
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.http.HttpHost;
|
|
||||||
import org.elasticsearch.action.get.GetRequest;
|
|
||||||
import org.elasticsearch.action.get.GetResponse;
|
|
||||||
import org.elasticsearch.action.search.SearchRequest;
|
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
|
||||||
import org.elasticsearch.client.RequestOptions;
|
|
||||||
import org.elasticsearch.client.RestClient;
|
|
||||||
import org.elasticsearch.client.RestHighLevelClient;
|
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
|
||||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
||||||
import org.elasticsearch.index.query.MatchQueryBuilder;
|
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
|
||||||
import org.elasticsearch.index.query.RangeQueryBuilder;
|
|
||||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class ElasticSearchTest {
|
|
||||||
|
|
||||||
public final String ES_URL = "127.0.0.1";
|
|
||||||
|
|
||||||
public final int ES_PORT = 9200;
|
|
||||||
|
|
||||||
|
|
||||||
public static RestHighLevelClient getClientConnection() {
|
|
||||||
|
|
||||||
RestHighLevelClient client = new RestHighLevelClient(
|
|
||||||
RestClient.builder(
|
|
||||||
new HttpHost("localhost", 9200, "http")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void searchById() throws IOException {
|
|
||||||
RestHighLevelClient client = getClientConnection();
|
|
||||||
GetRequest getRequest = null;//new GetRequest("gateway_log", "DceJqGwBqlIig5BB05Z-");
|
|
||||||
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
|
|
||||||
System.out.println(getResponse.getSourceAsString());
|
|
||||||
client.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html
|
|
||||||
*
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
public static void paginationSearch() throws IOException {
|
|
||||||
|
|
||||||
SearchRequest searchRequest = new SearchRequest();
|
|
||||||
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
||||||
sourceBuilder.query(QueryBuilders.matchPhraseQuery("eventType", "WAN_ONOFF"));
|
|
||||||
sourceBuilder.from(0);
|
|
||||||
sourceBuilder.size(1);
|
|
||||||
sourceBuilder.timeout(new TimeValue(1000));
|
|
||||||
sourceBuilder.trackTotalHits(true);
|
|
||||||
searchRequest.source(sourceBuilder);
|
|
||||||
|
|
||||||
|
|
||||||
RestHighLevelClient client = getClientConnection();
|
|
||||||
SearchResponse response = client.search(new SearchRequest("gateway_log")
|
|
||||||
.source(sourceBuilder), RequestOptions.DEFAULT);
|
|
||||||
|
|
||||||
System.out.println(response.toString());
|
|
||||||
client.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void paginationSearch2() throws IOException {
|
|
||||||
RestHighLevelClient client = getClientConnection();
|
|
||||||
|
|
||||||
|
|
||||||
BoolQueryBuilder boolQuery = new BoolQueryBuilder();
|
|
||||||
|
|
||||||
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("count").gte(8);
|
|
||||||
boolQuery.filter(rangeQuery);
|
|
||||||
|
|
||||||
MatchQueryBuilder matchQuery = new MatchQueryBuilder("eventType", "WAN_ONOFF");
|
|
||||||
boolQuery.must(matchQuery);
|
|
||||||
|
|
||||||
SearchResponse response = client.search(new SearchRequest("gateway_log")
|
|
||||||
.source(new SearchSourceBuilder()
|
|
||||||
.query(boolQuery)
|
|
||||||
.from(0)
|
|
||||||
.size(2)
|
|
||||||
.trackTotalHits(true)
|
|
||||||
), RequestOptions.DEFAULT);
|
|
||||||
|
|
||||||
System.out.println(response.getHits().getTotalHits());
|
|
||||||
System.out.println(response.toString());
|
|
||||||
client.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
|
||||||
//searchById();
|
|
||||||
//paginationSearch();
|
|
||||||
paginationSearch2();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -39,7 +39,6 @@ public class DruidFilter extends FilterEventAdapter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
|
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
|
||||||
String traceId = MDC.get("traceId");
|
|
||||||
int size = statement.getParametersSize();
|
int size = statement.getParametersSize();
|
||||||
String executeSql = sql;
|
String executeSql = sql;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@@ -47,7 +46,7 @@ public class DruidFilter extends FilterEventAdapter {
|
|||||||
count = statement.getUpdateCount();
|
count = statement.getUpdateCount();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotEmpty(traceId) && count > 0) {
|
if ( count > 0) {
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
Collection<JdbcParameter> values = statement.getParameters().values();
|
Collection<JdbcParameter> values = statement.getParameters().values();
|
||||||
List<Object> params = new ArrayList<>();
|
List<Object> params = new ArrayList<>();
|
||||||
@@ -65,28 +64,25 @@ public class DruidFilter extends FilterEventAdapter {
|
|||||||
public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException {
|
public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException {
|
||||||
ResultSetProxy rs = super.statement_getResultSet(chain, statement);
|
ResultSetProxy rs = super.statement_getResultSet(chain, statement);
|
||||||
String executeSql = statement.getLastExecuteSql();
|
String executeSql = statement.getLastExecuteSql();
|
||||||
String traceId = MDC.get("traceId");
|
int result = 0;
|
||||||
if (StringUtils.isNotEmpty(traceId)) {
|
if (rs != null) {
|
||||||
int result = 0;
|
ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class);
|
||||||
if (rs != null) {
|
result = rss.getRows().size();
|
||||||
ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class);
|
|
||||||
result = rss.getRows().size();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
int size = statement.getParametersSize();
|
|
||||||
if (size > 0) {
|
|
||||||
Collection<JdbcParameter> values = statement.getParameters().values();
|
|
||||||
List<Object> params = new ArrayList<>();
|
|
||||||
for (JdbcParameter value : values) {
|
|
||||||
params.add(value.getValue());
|
|
||||||
}
|
|
||||||
executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params);
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
log.warn("[-SQL解析异常-][{}]", ex.getMessage());
|
|
||||||
}
|
|
||||||
log.info("[----SQL----][select][执行结果:{}][ SQL: {} ]", result, executeSql);
|
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
int size = statement.getParametersSize();
|
||||||
|
if (size > 0) {
|
||||||
|
Collection<JdbcParameter> values = statement.getParameters().values();
|
||||||
|
List<Object> params = new ArrayList<>();
|
||||||
|
for (JdbcParameter value : values) {
|
||||||
|
params.add(value.getValue());
|
||||||
|
}
|
||||||
|
executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.warn("[-SQL解析异常-][{}]", ex.getMessage());
|
||||||
|
}
|
||||||
|
log.info("[----SQL----][select][执行结果:{}][ SQL: {} ]", result, executeSql);
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.aspectj.lang.reflect.MethodSignature;
|
|||||||
import org.nl.common.utils.BaseCode;
|
import org.nl.common.utils.BaseCode;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.config.lucene.LuceneAppender;
|
||||||
import org.nl.modules.common.utils.RequestHolder;
|
import org.nl.modules.common.utils.RequestHolder;
|
||||||
import org.nl.modules.common.utils.StringUtils;
|
import org.nl.modules.common.utils.StringUtils;
|
||||||
import org.nl.modules.common.utils.ThrowableUtil;
|
import org.nl.modules.common.utils.ThrowableUtil;
|
||||||
@@ -81,7 +82,7 @@ public class LogAspect {
|
|||||||
MDC.put("requestIp", StringUtils.getIp(request));
|
MDC.put("requestIp", StringUtils.getIp(request));
|
||||||
MDC.put("traceId", BaseCode.intToChars(IdUtil.getLongId()));
|
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 {
|
||||||
@@ -139,6 +140,7 @@ public class LogAspect {
|
|||||||
} finally {
|
} finally {
|
||||||
log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]", url, (System.currentTimeMillis() - comming) / 1000);
|
log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]", url, (System.currentTimeMillis() - comming) / 1000);
|
||||||
MDC.clear();
|
MDC.clear();
|
||||||
|
LuceneAppender.traceIdTL.remove();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
package org.nl.modules.logging.repository;
|
|
||||||
|
|
||||||
import org.nl.modules.logging.service.dto.LogRepositoryDTO;
|
|
||||||
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @author ZZQ
|
|
||||||
* @Date 2023/2/8 4:11 下午
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public interface EsLogRepository extends ElasticsearchRepository<LogRepositoryDTO, String> {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -2,6 +2,8 @@ package org.nl.modules.logging.rest;
|
|||||||
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.modules.logging.annotation.Log;
|
||||||
import org.nl.modules.logging.service.EsLogService;
|
import org.nl.modules.logging.service.EsLogService;
|
||||||
import org.nl.modules.logging.service.dto.LogQuery;
|
import org.nl.modules.logging.service.dto.LogQuery;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/api/esLog")
|
@RequestMapping("/api/esLog")
|
||||||
|
@Slf4j
|
||||||
public class EsLogController {
|
public class EsLogController {
|
||||||
private final EsLogService esLogService;
|
private final EsLogService esLogService;
|
||||||
|
|
||||||
@@ -41,4 +44,25 @@ public class EsLogController {
|
|||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DeleteMapping("/thread")
|
||||||
|
@Log("清空日志")
|
||||||
|
public ResponseEntity<Object> thread() {
|
||||||
|
log.info("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.error("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("Async线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
|
||||||
|
esLogService.syncdemo();
|
||||||
|
new Thread(()->{
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.error("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
log.info("线程链路测试"+Thread.currentThread().getName());
|
||||||
|
|
||||||
|
}).start();
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package org.nl.modules.logging.service;
|
package org.nl.modules.logging.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.nl.modules.logging.service.dto.LogQuery;
|
import org.nl.modules.logging.service.dto.LogQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,11 +24,7 @@ public interface EsLogService {
|
|||||||
*/
|
*/
|
||||||
JSONArray getLabelsValues(String type);
|
JSONArray getLabelsValues(String type);
|
||||||
|
|
||||||
/**
|
JSONObject query(LogQuery logQuery);
|
||||||
* 日志查询
|
|
||||||
*
|
void syncdemo();
|
||||||
* @param logQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
Page query(LogQuery logQuery);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class LogQuery {
|
|||||||
* 追踪id
|
* 追踪id
|
||||||
*/
|
*/
|
||||||
private String traceId;
|
private String traceId;
|
||||||
|
private String requestMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 日志内容模糊匹配
|
* 日志内容模糊匹配
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,13 +2,11 @@ package org.nl.modules.logging.service.dto;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
||||||
import org.springframework.data.elasticsearch.annotations.Document;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
* @Date 2023/2/8 4:06 下午
|
* @Date 2023/2/8 4:06 下午
|
||||||
*/
|
*/
|
||||||
@Document(indexName = "#{@ESConfig.index}", type = "lms_log")
|
|
||||||
@Data
|
@Data
|
||||||
public class LogRepositoryDTO {
|
public class LogRepositoryDTO {
|
||||||
|
|
||||||
|
|||||||
@@ -1,134 +0,0 @@
|
|||||||
package org.nl.modules.logging.service.impl;
|
|
||||||
|
|
||||||
import cn.hutool.core.date.DateField;
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.poi.ss.formula.functions.T;
|
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
|
||||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
|
||||||
import org.elasticsearch.script.Script;
|
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
|
||||||
import org.elasticsearch.search.aggregations.Aggregations;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
|
||||||
import org.nl.common.enums.LevelEnum;
|
|
||||||
import org.nl.modules.logging.repository.EsLogRepository;
|
|
||||||
import org.nl.modules.logging.service.EsLogService;
|
|
||||||
import org.nl.modules.logging.service.dto.LogQuery;
|
|
||||||
import org.nl.modules.logging.service.dto.LogRepositoryDTO;
|
|
||||||
import org.springframework.data.domain.PageRequest;
|
|
||||||
import org.springframework.data.domain.Sort;
|
|
||||||
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
|
|
||||||
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
|
|
||||||
import org.springframework.data.elasticsearch.core.query.DeleteQuery;
|
|
||||||
import org.springframework.data.elasticsearch.core.query.FetchSourceFilter;
|
|
||||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ldjun
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023年02月07日 14:35
|
|
||||||
* @desc desc
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class EsLogServiceImpl implements EsLogService {
|
|
||||||
|
|
||||||
private final EsLogRepository esLogRepository;
|
|
||||||
|
|
||||||
private final ElasticsearchRestTemplate elasticsearchRestTemplate;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Page query(LogQuery logQuery) {
|
|
||||||
Page<T> page = new Page<>();
|
|
||||||
if (logQuery != null) {
|
|
||||||
BoolQueryBuilder query = QueryBuilders.boolQuery(); //requestMethod
|
|
||||||
extractedParam(logQuery, query);
|
|
||||||
Iterable<LogRepositoryDTO> all = esLogRepository.search(query, PageRequest.of(logQuery.getPage() - 1, logQuery.getSize(), Sort.by("@timestamp").descending()));
|
|
||||||
page.setRecords(((AggregatedPageImpl) all).getContent());
|
|
||||||
page.setTotal(((AggregatedPageImpl) all).getTotalElements());
|
|
||||||
page.setPages(logQuery.getPage());
|
|
||||||
page.setSize(logQuery.getSize());
|
|
||||||
}
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void extractedParam(LogQuery logQuery, BoolQueryBuilder query) {
|
|
||||||
if (StringUtils.isNotEmpty(logQuery.getLogLevel())) {
|
|
||||||
query.must().add(QueryBuilders.matchQuery("logLevel", LevelEnum.checkLevel(logQuery.getLogLevel())));
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotEmpty(logQuery.getSystem())) {
|
|
||||||
query.must().add(QueryBuilders.matchQuery("system", logQuery.getSystem()));
|
|
||||||
}
|
|
||||||
if (logQuery.getIsRequest()) {
|
|
||||||
query.must().add(QueryBuilders.existsQuery("requestMethod"));
|
|
||||||
}
|
|
||||||
if (logQuery.getFilterSql()) {
|
|
||||||
query.mustNot().add(QueryBuilders.wildcardQuery("logger", "org.nl.modules.wql.core.engine.*"));
|
|
||||||
}
|
|
||||||
query.mustNot().add(QueryBuilders.matchPhraseQuery("logger", "org.elasticsearch.client.RestClient"));
|
|
||||||
if (StringUtils.isNotEmpty(logQuery.getTraceId())) {
|
|
||||||
query.must().add(QueryBuilders.matchQuery("traceId", logQuery.getTraceId()));
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotEmpty(logQuery.getMessage())) {
|
|
||||||
query.must().add(QueryBuilders.matchPhraseQuery("message", logQuery.getMessage()));
|
|
||||||
}
|
|
||||||
if (logQuery.getEndTime() != null) {
|
|
||||||
String script = "doc['@timestamp'].value.millis < " + logQuery.getEndTime().getTime() + "L";
|
|
||||||
query.must().add(QueryBuilders.scriptQuery(new Script(script)));
|
|
||||||
}
|
|
||||||
if (logQuery.getStartTime() != null) {
|
|
||||||
String script = "doc['@timestamp'].value.millis > " + logQuery.getStartTime().getTime() + "L";
|
|
||||||
query.must().add(QueryBuilders.scriptQuery(new Script(script)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearLogs(LogQuery logQuery) {
|
|
||||||
String system = logQuery.getSystem();
|
|
||||||
BoolQueryBuilder query = QueryBuilders.boolQuery();
|
|
||||||
if (!StringUtils.isEmpty(system)) {
|
|
||||||
query.must().add(QueryBuilders.matchQuery("system", system));
|
|
||||||
}
|
|
||||||
long time = DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, -10).getTime();
|
|
||||||
String script = "doc['@timestamp'].value.millis < " + time + "L";
|
|
||||||
query.must().add(QueryBuilders.scriptQuery(new Script(script)));
|
|
||||||
DeleteQuery deleteQuery = new DeleteQuery();
|
|
||||||
deleteQuery.setQuery(query);
|
|
||||||
elasticsearchRestTemplate.delete(deleteQuery, new LogRepositoryDTO().getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JSONArray getLabelsValues(String type) {
|
|
||||||
JSONArray result = new JSONArray();
|
|
||||||
FetchSourceFilter fetchSourceFilter = new FetchSourceFilter(new String[]{type}, null);
|
|
||||||
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
|
|
||||||
queryBuilder.withCollapseField(type + ".keyword");
|
|
||||||
queryBuilder.withSourceFilter(fetchSourceFilter);
|
|
||||||
queryBuilder.addAggregation(AggregationBuilders.terms(type).field(type + ".keyword").size(100));
|
|
||||||
Aggregations agg = elasticsearchRestTemplate.query(queryBuilder.build(), SearchResponse::getAggregations);
|
|
||||||
Terms terms = agg.get(type);
|
|
||||||
List<? extends Terms.Bucket> buckets = terms.getBuckets();
|
|
||||||
if (!CollectionUtils.isEmpty(buckets)) {
|
|
||||||
buckets.stream().map(Terms.Bucket::getKeyAsString).forEach(v -> {
|
|
||||||
JSONObject item = new JSONObject();
|
|
||||||
item.put("label", v);
|
|
||||||
item.put("value", v);
|
|
||||||
result.add(item);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
package org.nl.modules.logging.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateField;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.db.PageResult;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.index.DirectoryReader;
|
||||||
|
import org.apache.lucene.index.IndexWriter;
|
||||||
|
import org.apache.lucene.index.IndexWriterConfig;
|
||||||
|
import org.apache.lucene.index.Term;
|
||||||
|
import org.apache.lucene.queryparser.classic.QueryParser;
|
||||||
|
import org.apache.lucene.search.*;
|
||||||
|
import org.apache.lucene.store.FSDirectory;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
|
import org.nl.config.lucene.LuceneAppender;
|
||||||
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.nl.modules.logging.service.EsLogService;
|
||||||
|
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.wltea.analyzer.lucene.IKAnalyzer;
|
||||||
|
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ldjun
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2023年02月07日 14:35
|
||||||
|
* @desc desc
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class LuceneLogServiceImpl implements EsLogService {
|
||||||
|
|
||||||
|
static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"};
|
||||||
|
|
||||||
|
@Value("${lucene.index.path}")
|
||||||
|
private String indexUrl;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearLogs(LogQuery query) {
|
||||||
|
try {
|
||||||
|
// 初始化 Lucene 索引
|
||||||
|
IndexWriter indexWriter = LuceneAppender.indexWriter;
|
||||||
|
if (indexWriter != null){
|
||||||
|
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
|
||||||
|
DateTime offset = DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -10);
|
||||||
|
TermRangeQuery termRangeQuery = new TermRangeQuery(
|
||||||
|
"requestTime",null,
|
||||||
|
new BytesRef(DateUtil.format(offset, "yyyy-MM-dd HH:mm:ss.SSS")), true, true);
|
||||||
|
booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST);
|
||||||
|
indexWriter.deleteDocuments(termRangeQuery);
|
||||||
|
indexWriter.commit();
|
||||||
|
}
|
||||||
|
}catch (Exception ex){
|
||||||
|
throw new BadRequestException("删除失败:"+ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONArray getLabelsValues(String type) {
|
||||||
|
JSONArray result = new JSONArray();
|
||||||
|
for (String v : INFO_LEVEL) {
|
||||||
|
JSONObject item = new JSONObject();
|
||||||
|
item.put("label", v);
|
||||||
|
item.put("value", v);
|
||||||
|
result.add(item);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject query(LogQuery logQuery) {
|
||||||
|
JSONObject res = new JSONObject();
|
||||||
|
PageResult page = new PageResult();
|
||||||
|
page.setPage(logQuery.getPage());
|
||||||
|
page.setPageSize(logQuery.getSize());
|
||||||
|
try {
|
||||||
|
FSDirectory directory = FSDirectory.open(Paths.get(indexUrl));
|
||||||
|
DirectoryReader open = DirectoryReader.open(directory);
|
||||||
|
IndexSearcher searcher = new IndexSearcher(open);
|
||||||
|
// 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序
|
||||||
|
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
|
||||||
|
//时间范围查询
|
||||||
|
Date startDate = logQuery.getStartTime();
|
||||||
|
Date endDate = logQuery.getEndTime();
|
||||||
|
|
||||||
|
if (startDate == null){
|
||||||
|
Calendar calendar=Calendar.getInstance();
|
||||||
|
calendar.set(1970, 0, 1);
|
||||||
|
startDate = calendar.getTime(); }
|
||||||
|
if (endDate == null){ endDate = new DateTime(); }
|
||||||
|
TermRangeQuery termRangeQuery = new TermRangeQuery(
|
||||||
|
"requestTime",
|
||||||
|
new BytesRef(DateUtil.format(startDate, "yyyy-MM-dd HH:mm:ss.SSS")),
|
||||||
|
new BytesRef(DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss.SSS")), true, true);
|
||||||
|
booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST);
|
||||||
|
|
||||||
|
// 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses
|
||||||
|
if (ObjectUtil.isNotEmpty(logQuery.getTraceId())){
|
||||||
|
TermQuery termQuery = new TermQuery(new Term("traceId", logQuery.getTraceId()));
|
||||||
|
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(logQuery.getLogLevel())){
|
||||||
|
TermQuery termQuery = new TermQuery(new Term("logLevel", logQuery.getLogLevel()));
|
||||||
|
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(logQuery.getSystem())) {
|
||||||
|
TermQuery termQuery = new TermQuery(new Term("system", logQuery.getSystem()));
|
||||||
|
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(logQuery.getRequestMethod())) {
|
||||||
|
TermQuery termQuery = new TermQuery(new Term("requestMethod", logQuery.getRequestMethod()));
|
||||||
|
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
|
||||||
|
}
|
||||||
|
if (Boolean.TRUE.equals(logQuery.getIsRequest())) {
|
||||||
|
Term traceid = new Term("traceId"," ");
|
||||||
|
TermQuery termQuery = new TermQuery(traceid);
|
||||||
|
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST_NOT);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(logQuery.getMessage())){
|
||||||
|
//查询解析器
|
||||||
|
QueryParser queryParser = new QueryParser("message", new IKAnalyzer(true));
|
||||||
|
Query query = queryParser.parse(logQuery.getMessage());
|
||||||
|
booleanQueryBuilder.add(query, BooleanClause.Occur.MUST);
|
||||||
|
}
|
||||||
|
|
||||||
|
TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("time", SortField.Type.LONG,true)), 20000, 0);
|
||||||
|
searcher.search(booleanQueryBuilder.build(), collector);
|
||||||
|
TopDocs topDocs = collector.topDocs((logQuery.getPage()-1)*logQuery.getSize(), logQuery.getSize());
|
||||||
|
int totalSize = collector.getTotalHits();
|
||||||
|
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
|
||||||
|
|
||||||
|
List<LogRepositoryDTO> list = new ArrayList<>();
|
||||||
|
for (ScoreDoc scoreDoc : scoreDocs) {
|
||||||
|
Document doc = open.document(scoreDoc.doc);
|
||||||
|
LogRepositoryDTO dto = new LogRepositoryDTO();
|
||||||
|
dto.setSystem(doc.get("system"));
|
||||||
|
dto.setTraceId(doc.get("traceId"));
|
||||||
|
dto.setLogger(doc.get("logger"));
|
||||||
|
dto.setLogLevel(doc.get("logLevel"));
|
||||||
|
dto.setMessage(doc.get("message"));
|
||||||
|
dto.setRequestIp(doc.get("requestIp"));
|
||||||
|
dto.setRequestMethod(doc.get("requestMethod"));
|
||||||
|
dto.setRequestTime(doc.get("requestTime"));
|
||||||
|
dto.setThread(doc.get("thread"));
|
||||||
|
list.add(dto);
|
||||||
|
}
|
||||||
|
open.close();
|
||||||
|
directory.close();
|
||||||
|
page.addAll(list);
|
||||||
|
page.setTotal(scoreDocs.length);
|
||||||
|
res.put("total", totalSize);
|
||||||
|
}catch (Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
res.put("page",page);
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,22 +2,6 @@ server:
|
|||||||
port: 8010
|
port: 8010
|
||||||
#配置数据源
|
#配置数据源
|
||||||
spring:
|
spring:
|
||||||
data:
|
|
||||||
elasticsearch:
|
|
||||||
repositories:
|
|
||||||
enabled: true
|
|
||||||
client:
|
|
||||||
reactive:
|
|
||||||
#endpoints: 172.31.185.110:9200,172.31.154.9:9200 #内网
|
|
||||||
# endpoints: 47.96.133.178:8200 #外网
|
|
||||||
endpoints: http://10.1.3.90:9200 #外网
|
|
||||||
elasticsearch:
|
|
||||||
rest:
|
|
||||||
#uris: 172.31.185.110:9200,172.31.154.9:9200 #内网
|
|
||||||
# uris: 47.96.133.178:8200 #外网
|
|
||||||
uris: http://10.1.3.90:9200 #外网
|
|
||||||
# username: elastic
|
|
||||||
# password: 123456
|
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
@@ -186,3 +170,6 @@ loki:
|
|||||||
systemName: lms
|
systemName: lms
|
||||||
es:
|
es:
|
||||||
index: lms_log
|
index: lms_log
|
||||||
|
lucene:
|
||||||
|
index:
|
||||||
|
path: D:\lms\lucene\index
|
||||||
|
|||||||
@@ -2,22 +2,6 @@ server:
|
|||||||
port: 8013
|
port: 8013
|
||||||
#配置数据源
|
#配置数据源
|
||||||
spring:
|
spring:
|
||||||
data:
|
|
||||||
elasticsearch:
|
|
||||||
repositories:
|
|
||||||
enabled: true
|
|
||||||
client:
|
|
||||||
reactive:
|
|
||||||
#endpoints: 172.31.185.110:9200,172.31.154.9:9200 #内网
|
|
||||||
# endpoints: 47.96.133.178:8200 #外网
|
|
||||||
endpoints: http://10.1.3.90:9200 #外网
|
|
||||||
elasticsearch:
|
|
||||||
rest:
|
|
||||||
#uris: 172.31.185.110:9200,172.31.154.9:9200 #内网
|
|
||||||
# uris: 47.96.133.178:8200 #外网
|
|
||||||
uris: http://10.1.3.90:9200 #外网
|
|
||||||
# username: elastic
|
|
||||||
# password: 123456
|
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
@@ -183,3 +167,6 @@ sa-token:
|
|||||||
cookie:
|
cookie:
|
||||||
# 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com
|
# 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com
|
||||||
domain:
|
domain:
|
||||||
|
lucene:
|
||||||
|
index:
|
||||||
|
path: D:\lms\lucene\index
|
||||||
|
|||||||
@@ -147,3 +147,6 @@ logging:
|
|||||||
file:
|
file:
|
||||||
path: C:\log\wms
|
path: C:\log\wms
|
||||||
config: classpath:logback-spring.xml
|
config: classpath:logback-spring.xml
|
||||||
|
lucene:
|
||||||
|
index:
|
||||||
|
path: D:\lms\lucene\index
|
||||||
|
|||||||
@@ -119,10 +119,6 @@ mybatis-plus:
|
|||||||
db-config:
|
db-config:
|
||||||
id-type: INPUT
|
id-type: INPUT
|
||||||
banner: false
|
banner: false
|
||||||
management:
|
|
||||||
health:
|
|
||||||
elasticsearch:
|
|
||||||
enabled: false #取消对elasticsearch的检查 https://www.codeleading.com/article/60643988608/
|
|
||||||
jetcache:
|
jetcache:
|
||||||
statIntervalMinutes: 15
|
statIntervalMinutes: 15
|
||||||
areaInCacheName: false
|
areaInCacheName: false
|
||||||
@@ -143,3 +139,6 @@ jetcache:
|
|||||||
maxTotal: 50
|
maxTotal: 50
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 6379
|
port: 6379
|
||||||
|
lucene:
|
||||||
|
index:
|
||||||
|
path: D:\lms\lucene\index
|
||||||
|
|||||||
@@ -2,66 +2,6 @@
|
|||||||
<included>
|
<included>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
<!-- 按照每天生成日志文件 -->
|
<!-- 按照每天生成日志文件 -->
|
||||||
<appender name="FILE5" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE5" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
@@ -80,10 +20,13 @@
|
|||||||
<charset>${log.charset}</charset>
|
<charset>${log.charset}</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>2</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE5"/>
|
||||||
|
</appender>
|
||||||
<logger name="org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl" level="info" additivity="true">
|
<logger name="org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE5"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
|
|||||||
@@ -2,66 +2,6 @@
|
|||||||
<included>
|
<included>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
<!-- 按照每天生成日志文件 -->
|
<!-- 按照每天生成日志文件 -->
|
||||||
<appender name="FILE6" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE6" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
@@ -81,9 +21,13 @@
|
|||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>2</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE6"/>
|
||||||
|
</appender>
|
||||||
<logger name="org.nl.wms.sch.AcsUtil" level="info" additivity="true">
|
<logger name="org.nl.wms.sch.AcsUtil" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE6"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
|
|||||||
@@ -20,71 +20,14 @@
|
|||||||
<charset>${log.charset}</charset>
|
<charset>${log.charset}</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
<discardingThreshold>2</discardingThreshold>
|
||||||
<index>${esIndex}</index>
|
<queueSize>500</queueSize>
|
||||||
<type>lms_log</type>
|
<appender-ref ref="FILE4"/>
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
</appender>
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
|
|
||||||
<logger name="org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl" level="info" additivity="true">
|
<logger name="org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE4"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
</logger>
|
||||||
</logger>
|
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
</included>
|
</included>
|
||||||
|
|||||||
@@ -2,66 +2,6 @@
|
|||||||
<included>
|
<included>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
<!-- 按照每天生成日志文件 -->
|
<!-- 按照每天生成日志文件 -->
|
||||||
<appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
@@ -80,10 +20,13 @@
|
|||||||
<charset>${log.charset}</charset>
|
<charset>${log.charset}</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>2</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE2"/>
|
||||||
|
</appender>
|
||||||
<logger name="org.nl.wms.ext.sap.service.impl.LmsToSapServiceImpl" level="info" additivity="true">
|
<logger name="org.nl.wms.ext.sap.service.impl.LmsToSapServiceImpl" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE2"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
|
|||||||
@@ -2,66 +2,6 @@
|
|||||||
<included>
|
<included>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
<!-- 按照每天生成日志文件 -->
|
<!-- 按照每天生成日志文件 -->
|
||||||
<appender name="FILE3" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE3" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
@@ -81,9 +21,14 @@
|
|||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>2</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE3"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<logger name="org.nl.wms.ext.mes.service.impl.MesToLmsServiceImpl" level="info" additivity="true">
|
<logger name="org.nl.wms.ext.mes.service.impl.MesToLmsServiceImpl" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE3"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
|
|||||||
@@ -2,66 +2,6 @@
|
|||||||
<included>
|
<included>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
|
||||||
<property>
|
|
||||||
<name>system</name>
|
|
||||||
<value>lms</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>traceId</name>
|
|
||||||
<value>%X{traceId}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logLevel</name>
|
|
||||||
<value>%level</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestMethod</name>
|
|
||||||
<value>%X{requestMethod}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestTime</name>
|
|
||||||
<value>%d{yyyy-MM-dd HH:mm:ss.SSS}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>requestIp</name>
|
|
||||||
<value>%X{requestIp}</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>thread</name>
|
|
||||||
<value>%thread</value>
|
|
||||||
</property>
|
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
|
||||||
<springProperty scope="context" name="esIndex" source="es.index"/>
|
|
||||||
<!-- 按照每天生成日志文件 -->
|
<!-- 按照每天生成日志文件 -->
|
||||||
<appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
@@ -81,9 +21,15 @@
|
|||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>2</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE1"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<logger name="org.nl.wms.ext.sap.service.impl.SapToLmsServiceImpl" level="info" additivity="true">
|
<logger name="org.nl.wms.ext.sap.service.impl.SapToLmsServiceImpl" level="info" additivity="true">
|
||||||
<appender-ref ref="FILE1"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<!-- 打印sql -->
|
<!-- 打印sql -->
|
||||||
|
|||||||
@@ -56,34 +56,19 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<!--异步到文件-->
|
||||||
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
|
<discardingThreshold>0</discardingThreshold>
|
||||||
|
<queueSize>500</queueSize>
|
||||||
|
<appender-ref ref="FILE"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
|
<appender name="luceneAppender" class="org.nl.config.lucene.LuceneAppender" >
|
||||||
<url>http://10.1.3.90:9200/_bulk</url>
|
|
||||||
<index>${esIndex}</index>
|
|
||||||
<type>lms_log</type>
|
|
||||||
<loggerName>es-logger</loggerName> <!-- optional -->
|
|
||||||
<errorLoggerName>es-error-logger</errorLoggerName> <!-- optional -->
|
|
||||||
<connectTimeout>30000</connectTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<errorsToStderr>false</errorsToStderr> <!-- optional (default false) -->
|
|
||||||
<includeCallerData>false</includeCallerData> <!-- optional (default false) -->
|
|
||||||
<logsToStderr>false</logsToStderr> <!-- optional (default false) -->
|
|
||||||
<maxQueueSize>104857600</maxQueueSize> <!-- optional (default 104857600) -->
|
|
||||||
<maxRetries>3</maxRetries> <!-- optional (default 3) -->
|
|
||||||
<readTimeout>30000</readTimeout> <!-- optional (in ms, default 30000) -->
|
|
||||||
<sleepTime>250</sleepTime> <!-- optional (in ms, default 250) -->
|
|
||||||
<rawJsonMessage>false</rawJsonMessage> <!-- optional (default false) -->
|
|
||||||
<includeMdc>false</includeMdc> <!-- optional (default false) -->
|
|
||||||
<maxMessageSize>20000</maxMessageSize> <!-- optional (default -1 -->
|
|
||||||
<!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" /> <!– optional –>-->
|
|
||||||
<properties>
|
<properties>
|
||||||
<property>
|
<property>
|
||||||
<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>
|
||||||
@@ -104,92 +89,42 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<name>thread</name>
|
<name>thread</name>
|
||||||
<value>%thread</value>
|
<value>%thread</value>
|
||||||
</property>
|
</property>
|
||||||
<property>
|
|
||||||
<name>logger</name>
|
|
||||||
<value>%logger</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
</properties>
|
||||||
<headers>
|
|
||||||
<header>
|
|
||||||
<name>Content-Type</name>
|
|
||||||
<value>application/json</value>
|
|
||||||
</header>
|
|
||||||
</headers>
|
|
||||||
</appender>
|
</appender>
|
||||||
|
<appender name="asyncLuceneAppender" class="org.nl.config.lucene.AsyncLuceneAppender">
|
||||||
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender-ref ref="luceneAppender" />
|
||||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<queueSize>512</queueSize>
|
||||||
<level>error</level>
|
|
||||||
</filter>
|
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
||||||
<!--日志文件输出的文件名-->
|
|
||||||
<FileNamePattern>${LOG_HOME}/ERROR/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
|
||||||
<!--日志文件保留天数-->
|
|
||||||
<maxHistory>15</maxHistory>
|
|
||||||
<!--单个日志最大容量 至少10MB才能看得出来-->
|
|
||||||
<maxFileSize>200MB</maxFileSize>
|
|
||||||
<!--所有日志最多占多大容量-->
|
|
||||||
<totalSizeCap>20GB</totalSizeCap>
|
|
||||||
</rollingPolicy>
|
|
||||||
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
|
|
||||||
<pattern>${log.pattern}</pattern>
|
|
||||||
<charset>${log.charset}</charset>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<!--异步到文件-->
|
|
||||||
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
|
||||||
<discardingThreshold>0</discardingThreshold>
|
|
||||||
<queueSize>500</queueSize>
|
|
||||||
<appender-ref ref="FILE"/>
|
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!--开发环境:打印控制台-->
|
<!--开发环境:打印控制台-->
|
||||||
<springProfile name="dev">
|
<springProfile name="dev">
|
||||||
<root level="info">
|
<root level="debug">
|
||||||
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<!-- <appender-ref ref="asyncFileAppender"/>-->
|
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</root>
|
</root>
|
||||||
|
<logger name="jdbc" level="ERROR" additivity="true">
|
||||||
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
|
</logger>
|
||||||
<logger name="org.springframework" level="ERROR" additivity="true">
|
<logger name="org.springframework" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
|
||||||
<logger name="es-logger" level="warn" additivity="true">
|
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="org.apache" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.hibernate" level="ERROR" additivity="true">
|
<logger name="org.hibernate" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
|
||||||
<logger name="io.netty" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="io.lettuce" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="com.fasterxml" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.quartz" level="ERROR" additivity="true">
|
<logger name="org.quartz" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="com.google" level="ERROR" additivity="true">
|
<logger name="com.google" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="springfox" level="ERROR" additivity="true">
|
<logger name="org.redisson" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="log4jdbc" level="ERROR" additivity="true">
|
<logger name="org.nl.modules.wql" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="nl.basjes" level="ERROR" additivity="true">
|
<logger name="org.springframework.data" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
</springProfile>
|
</springProfile>
|
||||||
|
|
||||||
@@ -197,33 +132,16 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<!--生产环境:打印控制台和输出到文件-->
|
<!--生产环境:打印控制台和输出到文件-->
|
||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="ERROR"/>
|
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
</root>
|
</root>
|
||||||
<logger name="org.springframework" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="es-logger" level="warn" additivity="true">
|
|
||||||
<appender-ref ref="esLogAppender"/>
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="org.apache" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="org.hibernate" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="io.netty" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc" level="ERROR" additivity="true">
|
<logger name="jdbc" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="io.lettuce" level="ERROR" additivity="true">
|
<logger name="org.springframework" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="com.fasterxml" level="ERROR" additivity="true">
|
<logger name="org.hibernate" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.quartz" level="ERROR" additivity="true">
|
<logger name="org.quartz" level="ERROR" additivity="true">
|
||||||
@@ -232,13 +150,13 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<logger name="com.google" level="ERROR" additivity="true">
|
<logger name="com.google" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="springfox" level="ERROR" additivity="true">
|
<logger name="org.redisson" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="log4jdbc" level="ERROR" additivity="true">
|
<logger name="org.nl.modules.wql" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="nl.basjes" level="ERROR" additivity="true">
|
<logger name="org.springframework.data" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
</springProfile>
|
</springProfile>
|
||||||
@@ -247,22 +165,8 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<!--测试环境:打印控制台-->
|
<!--测试环境:打印控制台-->
|
||||||
<springProfile name="test">
|
<springProfile name="test">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
</root>
|
</root>
|
||||||
<logger name="jdbc.audit" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.resultset" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="springfox.documentation" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.resultsettable" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="jdbc.sqlonly" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
</springProfile>
|
</springProfile>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|||||||
@@ -33,6 +33,14 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="接口">
|
||||||
|
<el-input
|
||||||
|
v-model="requestMethod"
|
||||||
|
size="mini"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="关键字">
|
<el-form-item label="关键字">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="message"
|
v-model="message"
|
||||||
@@ -49,16 +57,6 @@
|
|||||||
clearable
|
clearable
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="SQL日志" prop="filterSql">
|
|
||||||
<el-switch
|
|
||||||
v-model="filterSql"
|
|
||||||
active-color="#F56C6C"
|
|
||||||
inactive-color="#409EFF"
|
|
||||||
active-value="1"
|
|
||||||
inactive-valu="0"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="HTTP日志" prop="isRequest">
|
<el-form-item label="HTTP日志" prop="isRequest">
|
||||||
<el-switch
|
<el-switch
|
||||||
v-model="isRequest"
|
v-model="isRequest"
|
||||||
@@ -84,12 +82,13 @@
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-show="showOptions" label="时间段">
|
<el-form-item v-show="showOptions" label="时间段">
|
||||||
<el-select v-model="timeZoneValue" filterable placeholder="请选择标签" size="mini" @change="queryData">
|
<el-select v-model="timeZoneValue" clearable filterable placeholder="请选择标签" size="mini" @change="queryData">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in timeZoneOptions"
|
v-for="item in timeZoneOptions"
|
||||||
:key="item.index"
|
:key="item.index"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
|
clearable
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -163,6 +162,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<span style="color: #6c0a99;font-weight: 700">{{ log.system }}</span>
|
<span style="color: #6c0a99;font-weight: 700">{{ log.system }}</span>
|
||||||
<span style="color: #13ce66">{{ log.thread }}</span>
|
<span style="color: #13ce66">{{ log.thread }}</span>
|
||||||
|
<span style="color: #cebb13">{{ log.logger }}</span>
|
||||||
<span :style="fontType(log.logLevel)">{{ log.logLevel }}</span>
|
<span :style="fontType(log.logLevel)">{{ log.logLevel }}</span>
|
||||||
<span>{{ log.requestIp }}</span>
|
<span>{{ log.requestIp }}</span>
|
||||||
<span style="color: #7c8db0">{{ log.requestTime }}</span>
|
<span style="color: #7c8db0">{{ log.requestTime }}</span>
|
||||||
@@ -205,6 +205,7 @@ export default {
|
|||||||
timeRange: [],
|
timeRange: [],
|
||||||
message: '',
|
message: '',
|
||||||
traceId: '',
|
traceId: '',
|
||||||
|
requestMethod: '',
|
||||||
size: 20,
|
size: 20,
|
||||||
logData: [],
|
logData: [],
|
||||||
filterSql: '1',
|
filterSql: '1',
|
||||||
@@ -302,6 +303,7 @@ export default {
|
|||||||
// 清空查询数据
|
// 清空查询数据
|
||||||
this.clearParam()
|
this.clearParam()
|
||||||
queryParam.logLevel = this.logLevelValue
|
queryParam.logLevel = this.logLevelValue
|
||||||
|
queryParam.requestMethod = this.requestMethod
|
||||||
const time = new Date()
|
const time = new Date()
|
||||||
if (this.timeZoneValue !== '') {
|
if (this.timeZoneValue !== '') {
|
||||||
queryParam.startTime = new Date(((time.getTime() - this.timeZoneValue)))
|
queryParam.startTime = new Date(((time.getTime() - this.timeZoneValue)))
|
||||||
@@ -312,7 +314,7 @@ export default {
|
|||||||
}
|
}
|
||||||
queryParam.message = this.message.replace(/^\s*|\s*$/g, '')
|
queryParam.message = this.message.replace(/^\s*|\s*$/g, '')
|
||||||
queryParam.filterSql = this.filterSql === '1'
|
queryParam.filterSql = this.filterSql === '1'
|
||||||
queryParam.isRequest = this.filterSql === '1'
|
queryParam.isRequest = this.isRequest === '1'
|
||||||
queryParam.traceId = this.traceId
|
queryParam.traceId = this.traceId
|
||||||
queryParam.size = this.size
|
queryParam.size = this.size
|
||||||
queryParam.page = this.page
|
queryParam.page = this.page
|
||||||
@@ -323,8 +325,8 @@ export default {
|
|||||||
this.total = res.total
|
this.total = res.total
|
||||||
// 清空
|
// 清空
|
||||||
this.logs = []
|
this.logs = []
|
||||||
for (const j in res.records) { // 用push的方式将所有日志数组添加进去
|
for (const j in res.page) { // 用push的方式将所有日志数组添加进去
|
||||||
this.logs.push(res.records[j])
|
this.logs.push(res.page[j])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user