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
+
-
+