From 517a481280c54d6da830b74e0eb6d850bb7b8bd5 Mon Sep 17 00:00:00 2001 From: SerLiunx-ctrl <17689543@qq.com> Date: Sat, 15 Jun 2024 10:32:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E6=9B=B4=E8=AF=A6=E7=BB=86=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AE=9E=E4=BE=8B=E4=BF=A1=E6=81=AF=E5=9B=9E=E6=98=BE?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ddns/core/instance/AbstractInstance.java | 12 +++++- .../ddns/core/instance/AliyunInstance.java | 31 +++------------ .../ddns/support/InstanceContextHolder.java | 39 +++++++++++++++++++ .../support/log/InstanceNameConverter.java | 23 +++++++++++ .../ddns/support/log/ProcessIdConverter.java | 4 +- src/main/resources/logback.xml | 7 +++- 6 files changed, 87 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/serliunx/ddns/support/InstanceContextHolder.java create mode 100644 src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java diff --git a/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java b/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java index e7e7d2b..adcb1fe 100644 --- a/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java +++ b/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import com.serliunx.ddns.constant.InstanceSource; import com.serliunx.ddns.constant.InstanceType; +import com.serliunx.ddns.support.InstanceContextHolder; import com.serliunx.ddns.support.NetworkContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,6 +23,7 @@ import static com.serliunx.ddns.constant.SystemConstants.XML_ROOT_INSTANCE_NAME; public abstract class AbstractInstance implements Instance { private static final Logger log = LoggerFactory.getLogger(AbstractInstance.class); + /** * 实例名称 *
  • 全局唯一 @@ -69,20 +71,28 @@ public abstract class AbstractInstance implements Instance { public void run() { if (isPause()) // 暂停态检查, 已暂停则不继续进行. return; + // 设置实例信息 + InstanceContextHolder.setInstance(this); + log.debug("正在尝试查询IP信息."); value = query(); final String ipAddress = NetworkContextHolder.getIpAddress(); try { if (value != null && !value.isEmpty() && ipAddress != null && !ipAddress.isEmpty()) { - if (value.equals(ipAddress)) + if (value.equals(ipAddress)) { + log.debug("最新记录的IP与当前IP地址一致, 无需更新."); return; + } } + log.debug("正在尝试将记录旧IP: {} 更新为: {}", value, ipAddress); value = ipAddress; run0(); } catch (Exception e) { log.error(e.getMessage()); } finally { this.value = null; + // 移除实例信息 + InstanceContextHolder.clear(); } } diff --git a/src/main/java/com/serliunx/ddns/core/instance/AliyunInstance.java b/src/main/java/com/serliunx/ddns/core/instance/AliyunInstance.java index 6bf2353..bcdc690 100644 --- a/src/main/java/com/serliunx/ddns/core/instance/AliyunInstance.java +++ b/src/main/java/com/serliunx/ddns/core/instance/AliyunInstance.java @@ -100,7 +100,7 @@ public class AliyunInstance extends AbstractInstance { .setEndpointOverride("alidns.cn-hangzhou.aliyuncs.com") ) .build(); - debug("初始化完成."); + log.debug("初始化完成."); } @Override @@ -111,18 +111,18 @@ public class AliyunInstance extends AbstractInstance { .type(recordType) .value(value) .build(); - debug("正在更新解析记录."); + log.debug("正在更新解析记录."); CompletableFuture requestResponse = client.updateDomainRecord(request); try { requestResponse.whenComplete((v, t) -> { if (t != null) { //出现异常 - handleThrowable(t); + log.error("出现异常 {}:", t.getCause(), t.getMessage()); } else { String result = null; try { result = jsonMapper.writeValueAsString(v.getBody()); } catch (JsonProcessingException ignored) {} finally { - debug("操作结束, 结果: {}", result == null ? v : result); + log.debug("操作结束, 结果: {}", result == null ? v : result); } } }); @@ -146,10 +146,10 @@ public class AliyunInstance extends AbstractInstance { } return null; } catch (InterruptedException | ExecutionException e) { - error("出现了不应该出现的异常 => {}", e); + log.error("出现了不应该出现的异常 => {}", e); return null; } catch (TimeoutException e) { - error("记录查询超时!"); + log.error("记录查询超时!"); return null; } } @@ -235,23 +235,4 @@ public class AliyunInstance extends AbstractInstance { ", value='" + value + '\'' + '}'; } - - private void handleThrowable(Throwable t){ - error("出现异常 {}:", t.getCause(), t.getMessage()); - } - - @SuppressWarnings("all") - private void log(String msg, Object...params) { - log.info("[实例活动][" + name + "]" + msg, params); - } - - @SuppressWarnings("all") - private void debug(String msg, Object...params) { - log.debug("[实例活动][" + name + "]" + msg, params); - } - - @SuppressWarnings("all") - private void error(String msg, Object...params) { - log.error("[实例异常][" + name + "]" + msg, params); - } } diff --git a/src/main/java/com/serliunx/ddns/support/InstanceContextHolder.java b/src/main/java/com/serliunx/ddns/support/InstanceContextHolder.java new file mode 100644 index 0000000..01bd2d3 --- /dev/null +++ b/src/main/java/com/serliunx/ddns/support/InstanceContextHolder.java @@ -0,0 +1,39 @@ +package com.serliunx.ddns.support; + +import com.serliunx.ddns.core.instance.Instance; + +/** + * 实例信息上下文 + * @author SerLiunx + * @version 1.0.0 + * @since 2024/6/15 + */ +public final class InstanceContextHolder { + + private static final ThreadLocal INSTANCE_THREAD_LOCAL = new ThreadLocal<>(); + + private InstanceContextHolder() {throw new UnsupportedOperationException();} + + /** + * 设置当前线程的实例信息 + * @param instance 实例 + */ + public static void setInstance(Instance instance) { + INSTANCE_THREAD_LOCAL.set(instance); + } + + /** + * 获取当前线程的实例信息 + * @return 实例信息 + */ + public static Instance getInstance() { + return INSTANCE_THREAD_LOCAL.get(); + } + + /** + * 清除当前线程的实例信息 + */ + public static void clear() { + INSTANCE_THREAD_LOCAL.remove(); + } +} diff --git a/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java b/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java new file mode 100644 index 0000000..3347a08 --- /dev/null +++ b/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java @@ -0,0 +1,23 @@ +package com.serliunx.ddns.support.log; + +import ch.qos.logback.classic.pattern.ClassicConverter; +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.serliunx.ddns.core.instance.Instance; +import com.serliunx.ddns.support.InstanceContextHolder; + +/** + * 获取当前任何线程的实例信息 + * @author SerLiunx + * @version 1.0.0 + * @since 2024/6/15 + */ +public class InstanceNameConverter extends ClassicConverter { + + @Override + public String convert(ILoggingEvent event) { + Instance instance = InstanceContextHolder.getInstance(); + if (instance != null) + return instance.getName(); + return "----"; + } +} diff --git a/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java b/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java index 7f30ad7..86237dd 100644 --- a/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java +++ b/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java @@ -3,6 +3,8 @@ package com.serliunx.ddns.support.log; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILoggingEvent; +import java.lang.management.ManagementFactory; + /** * 日志变量%pid(进程id) 转换器 * @author SerLiunx @@ -11,7 +13,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; */ public class ProcessIdConverter extends ClassicConverter { - private static final String PROCESS_ID = java.lang.management.ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; + private static final String PROCESS_ID = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; @Override public String convert(ILoggingEvent iLoggingEvent) { diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 88c9b95..2210ac7 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,13 +1,16 @@ + - %boldGreen(%d{yyyy年MM月dd日 HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %highlight([%-6level]) %boldYellow(%-45logger{32}): %highlight(%msg%n) + + %boldGreen(%d{yyyy年MM月dd日 HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %yellow([%16.16instance]) %highlight([%-6level]) %boldYellow(%-36logger{32}): %msg%n + - +