feat: 日志现在会输出线程正在进行的活动.

This commit is contained in:
2024-06-17 14:10:56 +08:00
parent 63165c6666
commit 462c98e698
2 changed files with 38 additions and 2 deletions

View File

@@ -10,7 +10,14 @@ import com.serliunx.ddns.core.instance.Instance;
*/ */
public final class InstanceContextHolder { public final class InstanceContextHolder {
/**
* 当前线程所涉及的实例信息
*/
private static final ThreadLocal<Instance> INSTANCE_THREAD_LOCAL = new ThreadLocal<>(); private static final ThreadLocal<Instance> INSTANCE_THREAD_LOCAL = new ThreadLocal<>();
/**
* 当前线程所需要的附加信息
*/
private static final ThreadLocal<String> ADDITIONAL_INFORMATION_THREAD_LOCAL = new ThreadLocal<>();
private InstanceContextHolder() {throw new UnsupportedOperationException();} private InstanceContextHolder() {throw new UnsupportedOperationException();}
@@ -30,10 +37,33 @@ public final class InstanceContextHolder {
return INSTANCE_THREAD_LOCAL.get(); return INSTANCE_THREAD_LOCAL.get();
} }
/**
* 设置附加信息
* @param additional 附加信息
*/
public static void setAdditional(String additional) {
ADDITIONAL_INFORMATION_THREAD_LOCAL.set(additional);
}
/**
* 获取附加信息
* @return 附加信息
*/
public static String getAdditional() {
return ADDITIONAL_INFORMATION_THREAD_LOCAL.get();
}
/** /**
* 清除当前线程的实例信息 * 清除当前线程的实例信息
*/ */
public static void clear() { public static void clearInstance() {
INSTANCE_THREAD_LOCAL.remove(); INSTANCE_THREAD_LOCAL.remove();
} }
/**
* 清除当前线程的附加信息
*/
public static void clearAdditional() {
ADDITIONAL_INFORMATION_THREAD_LOCAL.remove();
}
} }

View File

@@ -56,6 +56,7 @@ public final class SystemInitializer implements Refreshable, Clearable {
@Override @Override
public void refresh() { public void refresh() {
InstanceContextHolder.setAdditional("main-refreshing");
log.info("程序正在初始化, 请稍候."); log.info("程序正在初始化, 请稍候.");
// 检查正在运行的实例信息, 安全的停止(手动刷新时需要执行的逻辑, 初始化不需要) // 检查正在运行的实例信息, 安全的停止(手动刷新时需要执行的逻辑, 初始化不需要)
@@ -82,6 +83,7 @@ public final class SystemInitializer implements Refreshable, Clearable {
// 实例提交后, 清理实例、配置缓存, 因为读取一次就不需要了 // 实例提交后, 清理实例、配置缓存, 因为读取一次就不需要了
clear(); clear();
log.info("初始化完成!"); log.info("初始化完成!");
InstanceContextHolder.clearAdditional();
} }
@Override @Override
@@ -133,7 +135,7 @@ public final class SystemInitializer implements Refreshable, Clearable {
for (Instance i : instances) { for (Instance i : instances) {
if (!i.validate()) { if (!i.validate()) {
log.error("实例{}({})参数校验不通过, 将不会被运行.", i.getName(), i.getType()); log.warn("实例{}({})参数校验不通过, 将不会被运行.", i.getName(), i.getType());
continue; continue;
} }
// 初始化实例 // 初始化实例
@@ -154,6 +156,7 @@ public final class SystemInitializer implements Refreshable, Clearable {
// 提交定时获取网络IP的定时任务 // 提交定时获取网络IP的定时任务
scheduledThreadPoolExecutor.scheduleAtFixedRate(() -> { scheduledThreadPoolExecutor.scheduleAtFixedRate(() -> {
InstanceContextHolder.setAdditional("ip-update");
log.info("正在尝试获取本机最新的IP地址."); log.info("正在尝试获取本机最新的IP地址.");
IPAddressResponse response = IPAddressClient.instance.getIPAddress(); IPAddressResponse response = IPAddressClient.instance.getIPAddress();
String ip; String ip;
@@ -162,13 +165,16 @@ public final class SystemInitializer implements Refreshable, Clearable {
NetworkContextHolder.setIpAddress(ip); NetworkContextHolder.setIpAddress(ip);
log.info("本机最新公网IP地址 => {}", ip); log.info("本机最新公网IP地址 => {}", ip);
} }
InstanceContextHolder.clearAdditional();
}, 0, configuration.getLong(KEY_TASK_REFRESH_INTERVAL_IP, 300L), TimeUnit.SECONDS); }, 0, configuration.getLong(KEY_TASK_REFRESH_INTERVAL_IP, 300L), TimeUnit.SECONDS);
// 添加进程结束钩子函数 // 添加进程结束钩子函数
Runtime.getRuntime().addShutdownHook(new Thread(() -> { Runtime.getRuntime().addShutdownHook(new Thread(() -> {
InstanceContextHolder.setAdditional("stopping");
log.info("程序正在关闭中, 可能需要一定时间."); log.info("程序正在关闭中, 可能需要一定时间.");
scheduledThreadPoolExecutor.shutdown(); scheduledThreadPoolExecutor.shutdown();
log.info("已关闭."); log.info("已关闭.");
InstanceContextHolder.clearAdditional();
}, "DDNS-ShutDownHook")); }, "DDNS-ShutDownHook"));
} }