rev:代码整体修改

This commit is contained in:
ludj
2023-05-15 18:28:48 +08:00
parent b8ead96f16
commit ef6b8a07cf
15 changed files with 90 additions and 363 deletions

View File

@@ -242,6 +242,12 @@
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
<!--WQL--> <!--WQL-->
<dependency> <dependency>
<groupId>com.hynnet</groupId> <groupId>com.hynnet</groupId>
@@ -349,13 +355,6 @@
<version>5.0.1</version> <version>5.0.1</version>
</dependency> </dependency>
<!--loki-->
<!-- https://loki4j.github.io/loki-logback-appender/#quick-start -->
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender-jdk8</artifactId>
<version>1.3.2</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>

View File

@@ -1,40 +0,0 @@
package org.nl.modules.loki.rest;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.annotation.RateLimiter;
import org.nl.modules.loki.service.LokiService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @Author: lyd
* @Description: 日志监控
* @Date: 2022-08-15
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "日志监控")
@RequestMapping("/api/loki")
@Slf4j
public class LokiController {
private final LokiService lokiService;
@GetMapping("/labels/values")
@ApiOperation("获取标签")
public ResponseEntity<Object> labelsValues() {
return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK);
}
@PostMapping("/logs")
@ApiOperation("获取日志")
@RateLimiter(value = 1, timeout = 300) // 限流
public ResponseEntity<Object> getLogData(@RequestBody JSONObject json) {
return new ResponseEntity<>(lokiService.getLogData(json), HttpStatus.OK);
}
}

View File

@@ -1,25 +0,0 @@
package org.nl.modules.loki.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* @Author: lyd
* @Description: 服务类
* @Date: 2022-08-15
*/
public interface LokiService {
/**
* 获取日志信息
* @param json
* @return
*/
JSONObject getLogData(JSONObject json);
/**
* 获取labels和values树
* @return
*/
JSONArray getLabelsValues();
}

View File

@@ -1,113 +0,0 @@
package org.nl.modules.loki.service.impl;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.nl.modules.loki.service.LokiService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* @Author: lyd
* @Description: 实现类
* @Date: 2022-08-15
*/
@Service
@RequiredArgsConstructor
public class LokiServiceImpl implements LokiService {
@Value("${loki.url}")
private String lokiUrl;
@Value("${loki.systemName}")
private String systemName;
@Override
public JSONObject getLogData(JSONObject json) {
String logLabel = "";
String logLabelValue = "";
Long start = 0L;
Long end = 0L;
String text = "";
String limit = "100";
String direction = "backward";
if (json.get("logLabel") != null) logLabel = json.getString("logLabel");
if (json.get("logLabelValue") != null) logLabelValue = json.getString("logLabelValue");
if (json.get("text") != null) text = json.getString("text");
if (json.get("start") != null) start = json.getLong("start");
if (json.get("end") != null) end = json.getLong("end");
if (json.get("limits") != null) limit = json.getString("limits");
if (json.get("direction") != null) direction = json.getString("direction");
/**
* 组织参数
* 纳秒数
* 1660037391880000000
* 1641453208415000000
* http://localhost:3100/loki/api/v1/query_range?query={host="localhost"} |= ``&limit=1500&start=1641453208415000000&end=1660027623419419002
*/
JSONObject parse = null;
String query = lokiUrl + "/query_range?query={system=\"" + systemName + "\", " + logLabel + "=\"" + logLabelValue + "\"} |= `" + text + "`";
String result = "";
if (start==0L) {
result = HttpUtil.get(query + "&limit=" + limit + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
} else {
result = HttpUtil.get(query + "&limit=" + limit + "&start=" + start + "&end=" + end + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
}
try {
parse = (JSONObject) JSONObject.parse(result);
} catch (Exception e) {
// reslut的值可能为:too many outstanding requests,无法转化成Json
System.out.println("reslut:" + result);
// e.printStackTrace();
}
return parse;
}
/**
* 获取labels和values树
*
* @return
*/
@Override
public JSONArray getLabelsValues() {
/**
* [{
* label:
* value:
* children:[{
* label
* value
* }]
* }]
*/
JSONArray result = new JSONArray();
// 获取所有标签
String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(labelString);
JSONArray labels = parse.getJSONArray("data");
for (int i=0; i<labels.size(); i++) {
// 获取标签下的所有值
String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
JSONArray values = parse2.getJSONArray("data");
JSONArray children = new JSONArray();
// 组成树形状态 两级
for (int j=0; j<values.size(); j++) {
JSONObject leaf = new JSONObject();
leaf.put("label", values.getString(j));
leaf.put("value", values.getString(j));
children.add(leaf);
}
JSONObject node = new JSONObject();
node.put("label", labels.getString(i));
node.put("value", labels.getString(i));
node.put("children", children);
result.add(node);
}
return result;
}
}

View File

@@ -58,6 +58,13 @@ public interface AcsToWmsService {
*/ */
JSONObject apply(JSONObject whereJson); JSONObject apply(JSONObject whereJson);
/**
* 带事务
* @param param
* @return
*/
JSONObject transApply(JSONObject param) ;
/** /**
* ACS客户端--->LMS服务端 * ACS客户端--->LMS服务端
* 任务申请 * 任务申请

View File

@@ -4,12 +4,11 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.common.utils.RedisUtils;
@@ -22,25 +21,21 @@ import org.nl.wms.basedata.service.VehicleService;
import org.nl.wms.basedata.service.dto.MaterialbaseDto; import org.nl.wms.basedata.service.dto.MaterialbaseDto;
import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.basedata.service.dto.VehicleDto;
import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.log.LokiLog;
import org.nl.wms.log.LokiLogType;
import org.nl.wms.pda.scanGroup.HcwNumEnum;
import org.nl.wms.pda.scanGroup.KlzhcwUtil; import org.nl.wms.pda.scanGroup.KlzhcwUtil;
import org.nl.wms.pda.scanGroup.MyLinkedListService;
import org.nl.wms.pdm.service.DeviceService; import org.nl.wms.pdm.service.DeviceService;
import org.nl.wms.pdm.service.WorkordeService; import org.nl.wms.pdm.service.WorkordeService;
import org.nl.wms.pdm.service.dto.DeviceDto;
import org.nl.wms.pdm.service.dto.WorkorderDto; import org.nl.wms.pdm.service.dto.WorkorderDto;
import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.tasks.RegionTypeEnum;
import org.nl.wms.sch.tasks.callEmpty.HnjCallEmpVehicleTask; import org.nl.wms.sch.tasks.callEmpty.HnjCallEmpVehicleTask;
import org.nl.wms.sch.tasks.sendEmpty.KzdjwSendEmpVehicleTask;
import org.nl.wms.sch.tasks.callMaterial.YljCallMaterialTask; import org.nl.wms.sch.tasks.callMaterial.YljCallMaterialTask;
import org.nl.wms.sch.tasks.sendEmpty.KzdjwSendEmpVehicleTask;
import org.nl.wms.sch.tasks.sendMaterial.HnjSendMaterialTask; import org.nl.wms.sch.tasks.sendMaterial.HnjSendMaterialTask;
import org.nl.wms.st.structivt.service.StructivtService; import org.nl.wms.st.structivt.service.StructivtService;
import org.nl.wms.st.structivt.service.dto.StructivtDto; import org.nl.wms.st.structivt.service.dto.StructivtDto;
import org.springframework.http.HttpStatus; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -48,8 +43,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -65,6 +60,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
private final ParamService paramService; private final ParamService paramService;
@Autowired
private RedissonClient redissonClient;
@Autowired
private AcsToWmsService acsToWmsService;
/** /**
* task_id任务标识 * task_id任务标识
* task_code任务编码 * task_code任务编码
@@ -73,7 +73,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* @param string 条件 * @param string 条件
* @returnzss * @returnzss
*/ */
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override @Override
public Map<String, Object> receiveTaskStatusAcs(String string) { public Map<String, Object> receiveTaskStatusAcs(String string) {
JSONArray array = JSONArray.parseArray(string); JSONArray array = JSONArray.parseArray(string);
@@ -180,10 +179,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
param.put("workorder_qty", jsonObject1.getString("plan_qty")); param.put("workorder_qty", jsonObject1.getString("plan_qty"));
param.put("device_code", deviceService.findByCode(jsonObject1.getString("device_code")).getExtend_code()); param.put("device_code", deviceService.findByCode(jsonObject1.getString("device_code")).getExtend_code());
String workorder_uri = paramService.findByCode("mes_url").getValue() + "api/mes/materialIvt"; String workorder_uri = paramService.findByCode("mes_url").getValue() + "api/mes/materialIvt";
HttpRequest HttpRequest.post(workorder_uri).body(param.toJSONString()).execute();
.post(workorder_uri)
.body(param.toJSONString())
.execute();
} }
} catch (Exception e) { } catch (Exception e) {
status = "400"; status = "400";
@@ -196,7 +192,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return resp; return resp;
} }
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override @Override
public String againApply(String task_id) { public String againApply(String task_id) {
log.info("输入参数:" + task_id); log.info("输入参数:" + task_id);
@@ -220,13 +216,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return point_code; return point_code;
} }
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override @Override
public Map<String, Object> receivePointStatusFromAcs(Map<String, String> jsonObject) { public Map<String, Object> receivePointStatusFromAcs(Map<String, String> jsonObject) {
return null; return null;
} }
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override @Override
public Map<String, Object> orderFinish(String string) { public Map<String, Object> orderFinish(String string) {
JSONObject orderJson = JSONObject.parseObject(string); JSONObject orderJson = JSONObject.parseObject(string);
@@ -249,10 +245,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result; return result;
} }
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override
@SneakyThrows
public JSONObject apply(JSONObject jsonObject) {
String type = (String) jsonObject.get("type");
RLock lock = redissonClient.getLock("acs_to_wms:" + type);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
return acsToWmsService.transApply(jsonObject);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return null;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JSONObject apply(JSONObject whereJson) { public JSONObject transApply(JSONObject whereJson) {
JSONObject resp = new JSONObject(); JSONObject resp = new JSONObject();
String type = whereJson.getString("type"); String type = whereJson.getString("type");
String point_code = whereJson.getString("device_code"); String point_code = whereJson.getString("device_code");

View File

@@ -1,15 +0,0 @@
package org.nl.wms.log;
import java.lang.annotation.*;
/**
* @author: lyd
* @description: 自定义日志注解,用作LOKI日志分类
* @Date: 2022/10/10
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD})
@Documented
public @interface LokiLog {
LokiLogType type() default LokiLogType.DEFAULT;
}

View File

@@ -1,63 +0,0 @@
package org.nl.wms.log;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
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.slf4j.MDC;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @author: lyd
* @description: 自定义日志切面:https://cloud.tencent.com/developer/article/1655923
* @Date: 2022/10/10
*/
@Aspect
@Slf4j
@Component
public class LokiLogAspect {
/**
* 切到所有OperatorLog注解修饰的方法
*/
@Pointcut("@annotation(org.nl.wms.log.LokiLog)")
public void operatorLog() {
// 空方法
}
/**
* 利用@Around环绕增强
*
* @return
*/
@Around("operatorLog()")
public synchronized Object around(ProceedingJoinPoint pjp) throws Throwable {
// ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = attributes.getRequest();
// HttpServletResponse response = attributes.getResponse();
Signature signature = pjp.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
LokiLog lokiLog = method.getAnnotation(LokiLog.class);
// 获取描述信息
LokiLogType logType = lokiLog.type();
MDC.put("log_file_type", logType.getDesc());
log.info("输入参数:" + JSONObject.toJSONString(pjp.getArgs()));
Object proceed = pjp.proceed();
log.info("返回参数:" + JSONObject.toJSONString(proceed));
MDC.remove("log_file_type");
return proceed;
}
}

View File

@@ -1,25 +0,0 @@
package org.nl.wms.log;
/**
* @author: lyd
* @description:
* @Date: 2022/10/11
*/
public enum LokiLogType {
DEFAULT("默认"),
LMS_TO_MES("LMS请求MES"),
MES_TO_LMS("MES请求LMS"),
LMS_TO_ACS("LMS请求ACS"),
ACS_TO_LMS("ACS请求LMS");
private String desc;
LokiLogType(String desc) {
this.desc=desc;
}
public String getDesc() {
return desc;
}
}

View File

@@ -6,11 +6,9 @@ spring:
druid: druid:
db-type: com.alibaba.druid.pool.DruidDataSource db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:hf_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hongfeng_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root} username: ${DB_USER:root}
#password: ${DB_PWD:P@ssw0rd} password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:password}
# 初始连接数 # 初始连接数
initial-size: 5 initial-size: 5
# 最小连接数 # 最小连接数
@@ -57,7 +55,16 @@ redis:
database: ${REDIS_DB:15} database: ${REDIS_DB:15}
host: ${REDIS_HOST:127.0.0.1} host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:} redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置 # 登录相关配置
login: login:
@@ -150,7 +157,4 @@ sa-token:
jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
# token 前缀 # token 前缀
token-prefix: Bearer token-prefix: Bearer
is-print: false
loki:
url: http://localhost:3100/loki/api/v1
systemName: acs

View File

@@ -57,7 +57,16 @@ redis:
database: ${REDIS_DB:15} database: ${REDIS_DB:15}
host: ${REDIS_HOST:127.0.0.1} host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:} redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置 # 登录相关配置
login: login:
@@ -150,7 +159,4 @@ sa-token:
jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
# token 前缀 # token 前缀
token-prefix: Bearer token-prefix: Bearer
is-print: false
loki:
url: http://localhost:3100/loki/api/v1
systemName: lms

View File

@@ -150,7 +150,3 @@ sa-token:
jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
# token 前缀 # token 前缀
token-prefix: Bearer token-prefix: Bearer
loki:
url: http://localhost:3100/loki/api/v1
systemName: lms

View File

@@ -2,7 +2,7 @@ spring:
freemarker: freemarker:
check-template-location: false check-template-location: false
profiles: profiles:
active: prod active: dev
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
data: data:

View File

@@ -14,9 +14,6 @@ https://juejin.cn/post/6844903775631572999
<property name="log.pattern" <property name="log.pattern"
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/> value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/> <springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<springProperty scope="context" name="lokiUrl" source="loki.url"/>
<springProperty scope="context" name="systemName" source="loki.systemName"/>
<property name="LOKI_URL" value="${lokiUrl}"/>
<property name="SYSTEM_NAME" value="${systemName}"/> <property name="SYSTEM_NAME" value="${systemName}"/>
<property name="LOG_HOME" value="${logPath}"/> <property name="LOG_HOME" value="${logPath}"/>
<!--引入默认的一些设置--> <!--引入默认的一些设置-->
@@ -26,7 +23,7 @@ https://juejin.cn/post/6844903775631572999
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder>
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset> <!-- <charset>${log.charset}</charset>-->
</encoder> </encoder>
</appender> </appender>
@@ -47,6 +44,7 @@ https://juejin.cn/post/6844903775631572999
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符--> <!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder> </encoder>
</appender> </appender>
@@ -58,28 +56,10 @@ https://juejin.cn/post/6844903775631572999
<appender-ref ref="FILE"/> <appender-ref ref="FILE"/>
</appender> </appender>
<!--添加loki-->
<appender name="lokiAppender" class="com.github.loki4j.logback.Loki4jAppender">
<batchTimeoutMs>1000</batchTimeoutMs>
<http class="com.github.loki4j.logback.ApacheHttpSender">
<url>${LOKI_URL}/push</url>
</http>
<format>
<label>
<pattern>system=${SYSTEM_NAME},level=%level,logType=%X{log_file_type:-logType}</pattern>
</label>
<message>
<pattern>${log.pattern}</pattern>
</message>
<sortByTime>true</sortByTime>
</format>
</appender>
<!--开发环境:打印控制台--> <!--开发环境:打印控制台-->
<springProfile name="dev"> <springProfile name="dev">
<root level="debug"> <root level="debug">
<appender-ref ref="CONSOLE"/> <appender-ref ref="CONSOLE"/>
<appender-ref ref="lokiAppender" />
</root> </root>
<logger name="org.springframework" level="ERROR" additivity="false"> <logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/> <appender-ref ref="CONSOLE"/>
@@ -124,55 +104,55 @@ https://juejin.cn/post/6844903775631572999
<springProfile name="prod"> <springProfile name="prod">
<root level="info"> <root level="info">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</root> </root>
<logger name="org.springframework" level="ERROR" additivity="false"> <logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="org.apache" level="ERROR" additivity="false"> <logger name="org.apache" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="org.hibernate" level="ERROR" additivity="false"> <logger name="org.hibernate" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="io.netty" level="ERROR" additivity="false"> <logger name="io.netty" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="jdbc" level="ERROR" additivity="false"> <logger name="jdbc" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="io.lettuce" level="ERROR" additivity="false"> <logger name="io.lettuce" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="com.fasterxml" level="ERROR" additivity="false"> <logger name="com.fasterxml" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="org.quartz" level="ERROR" additivity="false"> <logger name="org.quartz" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="com.google" level="ERROR" additivity="false"> <logger name="com.google" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="springfox" level="ERROR" additivity="false"> <logger name="springfox" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="log4jdbc" level="ERROR" additivity="false"> <logger name="log4jdbc" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
<logger name="nl.basjes" level="ERROR" additivity="false"> <logger name="nl.basjes" level="ERROR" additivity="false">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</logger> </logger>
</springProfile> </springProfile>