diff --git a/src/main/java/com/serliunx/ddns/config/AbstractConfiguration.java b/src/main/java/com/serliunx/ddns/config/AbstractConfiguration.java index b751f23..c54ff2b 100644 --- a/src/main/java/com/serliunx/ddns/config/AbstractConfiguration.java +++ b/src/main/java/com/serliunx/ddns/config/AbstractConfiguration.java @@ -99,11 +99,16 @@ public abstract class AbstractConfiguration implements Configuration { public void refresh() { // 刷新配置信息 refresh0(); - final Boolean needPrint = getBoolean(ConfigurationKeys.KEY_CFG_LOG_ONSTART); + final Boolean needPrint = getBoolean(ConfigurationKeys.KEY_CFG_LOG_ONSTART, false); if (needPrint) printDetails(); } + @Override + public Map getAllKeyAndValue() { + return valueMap; + } + @Override public int getPriority() { return Integer.MAX_VALUE; diff --git a/src/main/java/com/serliunx/ddns/config/Configuration.java b/src/main/java/com/serliunx/ddns/config/Configuration.java index 82fe5b4..3d5e0bb 100644 --- a/src/main/java/com/serliunx/ddns/config/Configuration.java +++ b/src/main/java/com/serliunx/ddns/config/Configuration.java @@ -3,6 +3,8 @@ package com.serliunx.ddns.config; import com.serliunx.ddns.core.Priority; import com.serliunx.ddns.core.Refreshable; +import java.util.Map; + /** * 配置信息逻辑定义 * @author SerLiunx @@ -91,4 +93,10 @@ public interface Configuration extends Refreshable, Priority { */ @SuppressWarnings("rawtypes") T getEnum(Class clazz, String key, T defaultValue); + + /** + * 获取所有的键值对 + * @return 配置文件所有成功加载的键值对 + */ + Map getAllKeyAndValue(); } diff --git a/src/main/java/com/serliunx/ddns/config/FileConfiguration.java b/src/main/java/com/serliunx/ddns/config/FileConfiguration.java index c06b848..f0ec3d3 100644 --- a/src/main/java/com/serliunx/ddns/config/FileConfiguration.java +++ b/src/main/java/com/serliunx/ddns/config/FileConfiguration.java @@ -14,4 +14,8 @@ public abstract class FileConfiguration extends AbstractConfiguration { public FileConfiguration(String path) { this.path = path; } + + public String getPath() { + return path; + } } diff --git a/src/main/java/com/serliunx/ddns/config/YamlConfiguration.java b/src/main/java/com/serliunx/ddns/config/YamlConfiguration.java new file mode 100644 index 0000000..12b6e68 --- /dev/null +++ b/src/main/java/com/serliunx/ddns/config/YamlConfiguration.java @@ -0,0 +1,44 @@ +package com.serliunx.ddns.config; + +import org.yaml.snakeyaml.Yaml; + +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; + +/** + * yml/yaml格式的配置文件,目前用于语言文件 + * @author SerLiunx + * @version 1.0.0 + * @since 2024/6/17 + */ +public class YamlConfiguration extends FileConfiguration { + + public YamlConfiguration(String path, boolean refresh) { + super(path); + if (refresh) + refresh(); + } + + public YamlConfiguration(String path) { + this(path, false); + } + + @Override + protected void refresh0() { + try (InputStream inputStream = Files.newInputStream(Paths.get(path))) { + Yaml yaml = new Yaml(); + Map keyAndValue = yaml.load(inputStream); + if (keyAndValue != null) + valueMap.putAll(keyAndValue); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + protected void load0() { + // do nothing. + } +} 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 3b5789b..93c861c 100644 --- a/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java +++ b/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java @@ -67,7 +67,7 @@ public abstract class AbstractInstance implements Instance { InstanceContextHolder.setInstance(this); // 调用子类的初始化逻辑 init(); - InstanceContextHolder.clear(); + InstanceContextHolder.clearInstance(); } @Override @@ -99,7 +99,7 @@ public abstract class AbstractInstance implements Instance { } finally { this.value = null; // 移除实例信息 - InstanceContextHolder.clear(); + InstanceContextHolder.clearInstance(); } } @@ -111,7 +111,7 @@ public abstract class AbstractInstance implements Instance { return false; } boolean result = validate0(); - InstanceContextHolder.clear(); + InstanceContextHolder.clearInstance(); return result; } diff --git a/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java b/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java index 3347a08..7d43f06 100644 --- a/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java +++ b/src/main/java/com/serliunx/ddns/support/log/InstanceNameConverter.java @@ -6,7 +6,7 @@ import com.serliunx.ddns.core.instance.Instance; import com.serliunx.ddns.support.InstanceContextHolder; /** - * 获取当前任何线程的实例信息 + * 获取当前任何线程的实例信息或者附加信息 * @author SerLiunx * @version 1.0.0 * @since 2024/6/15 @@ -16,8 +16,13 @@ public class InstanceNameConverter extends ClassicConverter { @Override public String convert(ILoggingEvent event) { Instance instance = InstanceContextHolder.getInstance(); - if (instance != null) - return instance.getName(); - return "----"; + String content; + if (instance != null) { + content = instance.getName(); + } else { + content = InstanceContextHolder.getAdditional(); + return content == null ? "----" : content; + } + return content; } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index c5fd8fb..184ebf6 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -6,7 +6,7 @@ - %boldGreen(%d{yyyy-MM-dd HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %yellow([%16.16instance]) %highlight([%-6level]) %boldYellow(%-36logger{32}): %msg%n + %boldGreen(%d{yyyy-MM-dd HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %green([%16.16instance]) %highlight([%-6level]) %boldCyan(%-36logger{32}): %msg%n