diff --git a/mes/hd/nladmin-system/pom.xml b/mes/hd/nladmin-system/pom.xml index 4527e5e9..b8aa0e20 100644 --- a/mes/hd/nladmin-system/pom.xml +++ b/mes/hd/nladmin-system/pom.xml @@ -44,7 +44,19 @@ + + + com.internetitem + logback-elasticsearch-appender + 1.6 + + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + 2.7.5 + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java b/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java new file mode 100644 index 00000000..03b97930 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/aspect/LogAspect.java @@ -0,0 +1,137 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.aspect; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.modules.system.util.BaseCode; +import org.nl.utils.RequestHolder; +import org.nl.utils.SecurityUtils; +import org.nl.utils.StringUtils; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Zheng Jie + * @date 2018-11-24 + */ +@Component +@Aspect +@Slf4j +public class LogAspect { + + + @Pointcut("execution(* org.nl.wms.*.rest..*.*(..))") + public void logPointCut() { + } + + @Around("logPointCut()") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + String params = getParameter(method, joinPoint.getArgs()); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + String url = request.getRequestURI(); + + MDC.put("requestMethod",url); + MDC.put("requestIp", StringUtils.getIp(request)); + MDC.put("traceId", BaseCode.intToChars(IdUtil.getSnowflake(1, 1).nextId())); + MDC.put("requestTime", DateUtil.now()); + + Object result; + long comming = System.currentTimeMillis(); + try { + log.info("[--request--][请求接口:{}][请求参数:{}]",url,params); + result = joinPoint.proceed(); + + }catch (Exception ex){ + StringBuffer errorStack = new StringBuffer(); + errorStack.append("【异常堆栈:"); + String errorMsg = ex.getMessage(); + int x = 0; + StackTraceElement[] stackTrace = ex.getStackTrace(); + if (stackTrace!=null && stackTrace.length>0){ + for (StackTraceElement stack : stackTrace) { + x++;errorStack.append(stack.toString().replaceAll("<",">")).append(""); + if (x>10){ break; } + } + } + log.error("[-requestError-][请求接口:{}]【异常信息:{}】[请求参数:{}] {}", url,errorMsg,params, errorStack.append("】").toString()); + throw ex; + }finally { + log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]",url,(System.currentTimeMillis() - comming)/1000); + MDC.clear(); + } + return result; + } + + /** + * 根据方法和传入的参数获取请求参数 + */ + private String getParameter(Method method, Object[] args) { + List argList = new ArrayList<>(); + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + //将RequestBody注解修饰的参数作为请求参数 + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + argList.add(args[i]); + } + //将RequestParam注解修饰的参数作为请求参数 + RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class); + if (requestParam != null) { + Map map = new HashMap<>(); + String key = parameters[i].getName(); + if (!StrUtil.isEmpty(requestParam.value())) { + key = requestParam.value(); + } + map.put(key, args[i]); + argList.add(map); + } + } + if (argList.size() == 0) { + return ""; + } + return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); + } + + public String getUsername() { + try { + return SecurityUtils.getCurrentUsername(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java new file mode 100644 index 00000000..9e483c84 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/DruidFilter.java @@ -0,0 +1,95 @@ +package org.nl.config; + +import com.alibaba.druid.filter.FilterChain; +import com.alibaba.druid.filter.FilterEventAdapter; +import com.alibaba.druid.proxy.jdbc.JdbcParameter; +import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy; +import com.alibaba.druid.proxy.jdbc.ResultSetProxy; +import com.alibaba.druid.proxy.jdbc.StatementProxy; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcUtils; +import com.mysql.cj.jdbc.result.ResultSetImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/* + * @author ZZQ + * @Date 2023/2/10 11:27 上午 + */ +@Slf4j +public class DruidFilter extends FilterEventAdapter { + + @Override + public int preparedStatement_executeUpdate(FilterChain chain, PreparedStatementProxy statement) throws SQLException { + + return super.preparedStatement_executeUpdate(chain, statement); + } + + @Override + public int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql) throws SQLException { + + return super.statement_executeUpdate(chain, statement, sql); + } + + @Override + protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) { + String traceId = MDC.get("traceId"); + int size = statement.getParametersSize(); + String executeSql = sql; + int count = 0; + try { + count=statement.getUpdateCount(); + }catch (Exception ex){ } + if (StringUtils.isNotEmpty(traceId) && count>0) { + if (size > 0) { + Collection values = statement.getParameters().values(); + List params = new ArrayList<>(); + for (JdbcParameter value : values) { + params.add(value.getValue()); + } + executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + } + log.info("[----SQL----][update][ SQL: {} ]", executeSql); + } + super.statementExecuteAfter(statement, sql, result); + } + @Override + public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException { + ResultSetProxy rs = super.statement_getResultSet(chain, statement); + String executeSql = statement.getLastExecuteSql(); + String traceId = MDC.get("traceId"); + if (StringUtils.isNotEmpty(traceId)){ + int result = 0; + if (rs != null) { + ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class); + result = rss.getRows().size(); + } + try { + int size = statement.getParametersSize(); + if (size>0){ + Collection values = statement.getParameters().values(); + List 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; + } + + + + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/ESConfig.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/ESConfig.java new file mode 100644 index 00000000..8cf2e913 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/ESConfig.java @@ -0,0 +1,26 @@ +package org.nl.config; + +/* + * @author ZZQ + * @Date 2023/2/13 9:58 上午 + */ + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ESConfig { + + @Value(("${es.index}")) + private String index; + + + public String getIndex() { + return index; + } + + public void setIndex(String index) { + this.index = index; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/WebSocketServer.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/WebSocketServer.java index f6e9d0c2..f0342540 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/WebSocketServer.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/WebSocketServer.java @@ -106,7 +106,6 @@ public class WebSocketServer { * */ public static void sendInfo(SocketMsg socketMsg,@PathParam("sid") String sid) throws IOException { String message = JSONObject.toJSONString(socketMsg); - log.info("推送消息到"+sid+",推送内容:"+message); for (WebSocketServer item : webSocketSet) { try { //这里可以设定只推送给这个sid的,为null则全部推送 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java new file mode 100644 index 00000000..5cf6b031 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/domain/LogRepositoryDTO.java @@ -0,0 +1,28 @@ +package org.nl.modules.system.domain; + +import lombok.Data; +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.Document; + +/* + * @author ZZQ + * @Date 2023/2/8 4:06 下午 + */ +@Document(indexName = "#{@ESConfig.index}", type = "whxr_log") +@Data +public class LogRepositoryDTO { + + private String message; + private String host; + private String logLevel; + private String logger; + private String requestTime; + private String requestIp; + @Id + private String id; + private String traceId; + private String requestMethod; + private String thread; + private String system; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/enums/LevelEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/enums/LevelEnum.java new file mode 100644 index 00000000..b4ff20a5 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/enums/LevelEnum.java @@ -0,0 +1,20 @@ +package org.nl.modules.system.enums; + +import org.apache.commons.lang3.StringUtils; + +public enum LevelEnum { + DEBUG, + INFO, + WARN, + ERROR; + public static LevelEnum checkLevel(String level){ + if (!StringUtils.isEmpty(level)){ + for (LevelEnum value : LevelEnum.values()) { + if (value.name().equals(level)){ + return value; + }; + } + } + return LevelEnum.DEBUG; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java new file mode 100644 index 00000000..2c67e75e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/repository/EsLogRepository.java @@ -0,0 +1,14 @@ +package org.nl.modules.system.repository; + +import org.nl.modules.system.domain.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 { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java new file mode 100644 index 00000000..ce414a35 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java @@ -0,0 +1,37 @@ +package org.nl.modules.system.rest; + +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.nl.modules.system.service.EsLogService; +import org.nl.modules.system.service.dto.LogQuery; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年01月29日 18:55 + * @desc desc + */ + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/esLog") +public class EsLogController { + private final EsLogService esLogService; + + + @GetMapping("/labels/{type}") + @ApiOperation("获取标签") + public ResponseEntity labelsValues(@PathVariable String type) { + return new ResponseEntity<>(esLogService.getLabelsValues(type), HttpStatus.OK); + } + + @PostMapping("/query") + @ApiOperation("日志查询") + public ResponseEntity queryAll(@RequestBody LogQuery query) { + return new ResponseEntity<>(esLogService.query(query), HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java new file mode 100644 index 00000000..1a0bf26b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java @@ -0,0 +1,26 @@ +package org.nl.modules.system.service; + +import cn.hutool.db.PageResult; +import com.alibaba.fastjson.JSONArray; +import org.nl.modules.system.service.dto.LogQuery; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年02月07日 14:34 + * @desc desc + */ +public interface EsLogService { + /** + * 获取labels和values树 + * @return + */ + JSONArray getLabelsValues(String type); + + /** + * 日志查询 + * @param logQuery + * @return + */ + PageResult query(LogQuery logQuery); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/dto/LogQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/dto/LogQuery.java new file mode 100644 index 00000000..f0d54186 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/dto/LogQuery.java @@ -0,0 +1,46 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +import java.util.Date; + +/* + * @author ZZQ + * @Date 2023/2/8 5:18 下午 + */ +@Data +public class LogQuery { + /** + * 创建时间范围查询 + */ + private Date startTime; + private Date endTime; + /** + * 追踪id + */ + private String traceId; + /** + * 日志内容模糊匹配 + */ + private String message; + /** + * 日志级别 + */ + private String logLevel; + /** + * 系统标签 + */ + private String system; + /** + * 是否只查询Http相关请求 + */ + private Boolean isRequest = Boolean.TRUE; + /** + * 是否过滤wql日志 + */ + private Boolean filterSql = Boolean.TRUE; + + private Integer size = 20; + + private Integer page = 1; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java new file mode 100644 index 00000000..6e2d5c13 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java @@ -0,0 +1,115 @@ +package org.nl.modules.system.service.impl; + +import cn.hutool.db.PageResult; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +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.modules.system.domain.LogRepositoryDTO; +import org.nl.modules.system.enums.LevelEnum; +import org.nl.modules.system.repository.EsLogRepository; +import org.nl.modules.system.service.EsLogService; +import org.nl.modules.system.service.dto.LogQuery; +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.FetchSourceFilter; +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +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 PageResult query(LogQuery logQuery){ + PageResult page = new PageResult(); + if (logQuery != null){ + BoolQueryBuilder query = QueryBuilders.boolQuery(); //requestMethod + extractedParam(logQuery, query); + Iterable all = esLogRepository.search(query, PageRequest.of(logQuery.getPage()-1,logQuery.getSize(), Sort.by("@timestamp").descending())); + page.addAll(((AggregatedPageImpl) all).getContent()); + page.setTotal((int) ((AggregatedPageImpl) all).getTotalElements()); + page.setPage(logQuery.getPage()); + page.setPageSize(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 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; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java index b6413b9c..3c86b9bb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java @@ -100,7 +100,7 @@ public class MenuServiceImpl implements MenuService { * @return / */ @Override - @Cacheable(key = "'user:' + #p0") +// @Cacheable(key = "'user:' + #p0") public List findByUser(Long currentUserId) { List roles = roleService.findByUsersId(currentUserId); Set roleIds = roles.stream().map(RoleSmallDto::getId).collect(Collectors.toSet()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/util/BaseCode.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/util/BaseCode.java new file mode 100644 index 00000000..ddb51461 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/util/BaseCode.java @@ -0,0 +1,33 @@ +package org.nl.modules.system.util; + +/* + * @author ZZQ + * @Date 2023/2/9 2:54 下午 + */ +public class BaseCode { + + static final char[] MySerials = new char[]{ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', + 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p','q','r','s','t','u','v','w','x','y','z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q','R','S','T','U','V','W','X','Y','Z'}; + + + public static final String intToChars(long n){ + String s = ""; + if (n == 0) { + s = "0"; + } + while (n != 0) { + int i = (int) (n % MySerials.length); + char c = MySerials[i]; + s = c + s; + n = n / MySerials.length; + } + for (int x = s.length();x<5;x++){ + s="0"+s; + } + return s; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/start/Init.java b/mes/hd/nladmin-system/src/main/java/org/nl/start/Init.java index 728bc2d3..c5bd23e2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/start/Init.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/start/Init.java @@ -47,12 +47,12 @@ public class Init implements ApplicationRunner, BeanFactoryAware, ApplicationCon private void init() throws Exception { //初始化WQL initWql(); - //随线程启动 - initApplicationAutoInitialExecuter(); - initWebAutoInitialExecuter(); - //初始化任务调度 - initQuartz(); - //用户岗位表【sys_users_roles】 +// //随线程启动 +// initApplicationAutoInitialExecuter(); +// initWebAutoInitialExecuter(); +// //初始化任务调度 +// initQuartz(); +// //用户岗位表【sys_users_roles】 System.out.println("项目启动成功!"); } private void initOracle(){ diff --git a/mes/hd/nladmin-system/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/mes/hd/nladmin-system/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000..e8ba3bb6 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,8 @@ +{ + "properties": [ + { + "name": "es.index", + "type": "java.lang.String", + "description": "Description for es.index." + } +] } diff --git a/mes/hd/nladmin-system/src/main/resources/META-INF/druid-filter.properties b/mes/hd/nladmin-system/src/main/resources/META-INF/druid-filter.properties new file mode 100644 index 00000000..9b025c10 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/resources/META-INF/druid-filter.properties @@ -0,0 +1 @@ +druid.filters.DruidFilter=org.nl.config.DruidFilter diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml index 889ecee7..bd98628e 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -15,6 +15,22 @@ erp: #配置数据源 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: druid: db-type: com.alibaba.druid.pool.DruidDataSource @@ -58,16 +74,8 @@ spring: enabled: true url-pattern: /druid/* reset-enable: false - filter: - stat: - enabled: true - # 记录慢SQL - log-slow-sql: true - slow-sql-millis: 1000 - merge-sql: true - wall: - config: - multi-statement-allow: true + filters: + DruidFilter,stat redis: #数据库索引 database: 2 @@ -158,4 +166,6 @@ logging: file: path: C:\log\wms config: classpath:logback-spring.xml +es: + index: whxr_log diff --git a/mes/hd/nladmin-system/src/main/resources/config/application.yml b/mes/hd/nladmin-system/src/main/resources/config/application.yml index f56c0c14..dcbe87eb 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev jackson: time-zone: GMT+8 data: diff --git a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml index 7b0bcf1f..d25ad867 100644 --- a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -14,6 +14,7 @@ https://juejin.cn/post/6844903775631572999 + @@ -48,6 +49,66 @@ https://juejin.cn/post/6844903775631572999 + + http://47.96.133.178:8200/_bulk + ${esIndex} + whxr_log + es-logger + es-error-logger + 30000 + false + false + false + 104857600 + 3 + 30000 + 250 + false + false + 20000 + + + + system + mes + + + traceId + %X{traceId} + + + logLevel + %level + + + requestMethod + %X{requestMethod} + + + requestTime + %d{yyyy-MM-dd HH:mm:ss.SSS} + + + requestIp + %X{requestIp} + + + thread + %thread + + + logger + %logger + + + + + Content-Type + application/json + + + + @@ -58,9 +119,14 @@ https://juejin.cn/post/6844903775631572999 - + + + + + + @@ -99,10 +165,14 @@ https://juejin.cn/post/6844903775631572999 - - + + + + + + diff --git a/mes/qd/dist.zip b/mes/qd/dist.zip new file mode 100644 index 00000000..d1db3bf0 Binary files /dev/null and b/mes/qd/dist.zip differ diff --git a/mes/qd/src/views/tools/es/api/loki.js b/mes/qd/src/views/tools/es/api/loki.js new file mode 100644 index 00000000..b5a30942 --- /dev/null +++ b/mes/qd/src/views/tools/es/api/loki.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +export function getLogData(param) { + return request({ + url: '/api/esLog/query', + method: 'post', + data: param + }) +} + +export function labelsValues(type) { + return request({ + url: '/api/esLog/labels/' + type, + method: 'get' + }) +} + +export default { getLogData, labelsValues } diff --git a/mes/qd/src/views/tools/es/view/index.vue b/mes/qd/src/views/tools/es/view/index.vue new file mode 100644 index 00000000..c3091f6d --- /dev/null +++ b/mes/qd/src/views/tools/es/view/index.vue @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + + {{ item.label }} + + + + + + + + + + + + + + + {{ log.system }} + {{ log.thread }} + {{ log.logLevel }} + {{ log.requestIp }} + {{ log.requestTime }} + {{ log.traceId }} + {{ log.requestMethod }} + {{ log.message }} + + + + + + + + + + +