change: 调整日志格式. ***命令相关功能暂时关闭.

This commit is contained in:
2024-06-15 09:30:18 +08:00
parent 12e789e034
commit 5423fe32d4
10 changed files with 120 additions and 51 deletions

View File

@@ -4,12 +4,8 @@ import com.serliunx.ddns.config.PropertiesConfiguration;
import com.serliunx.ddns.constant.SystemConstants; import com.serliunx.ddns.constant.SystemConstants;
import com.serliunx.ddns.core.context.FileInstanceContext; import com.serliunx.ddns.core.context.FileInstanceContext;
import com.serliunx.ddns.support.SystemInitializer; import com.serliunx.ddns.support.SystemInitializer;
import com.serliunx.ddns.support.SystemSupport;
import com.serliunx.ddns.support.command.CommandManager; import com.serliunx.ddns.support.command.CommandManager;
import com.serliunx.ddns.support.command.cmd.ExitCommand; import com.serliunx.ddns.support.command.cmd.*;
import com.serliunx.ddns.support.command.cmd.HelpCommand;
import com.serliunx.ddns.support.command.cmd.IpCommand;
import org.slf4j.MDC;
import java.util.Scanner; import java.util.Scanner;
@@ -21,21 +17,8 @@ import java.util.Scanner;
public final class ManagerLite { public final class ManagerLite {
public static void main(String[] args) { public static void main(String[] args) {
// 日志参数调整
beforeInit();
// 容器初始化 // 容器初始化
SystemInitializer initializer = init(); init();
// 指令注册
CommandManager commandManager = registerCommand(initializer);
// 指令监听
handleCommand(commandManager, initializer);
}
private static void beforeInit() {
MDC.put("pid", SystemSupport.getPid());
} }
private static SystemInitializer init() { private static SystemInitializer init() {
@@ -48,14 +31,18 @@ public final class ManagerLite {
return systemInitializer; return systemInitializer;
} }
@Deprecated
private static CommandManager registerCommand(SystemInitializer systemInitializer) { private static CommandManager registerCommand(SystemInitializer systemInitializer) {
CommandManager commandManager = new CommandManager(systemInitializer); CommandManager commandManager = new CommandManager(systemInitializer);
commandManager.register(new HelpCommand(commandManager)); commandManager.register(new HelpCommand(commandManager));
commandManager.register(new IpCommand(commandManager)); commandManager.register(new IpCommand(commandManager));
commandManager.register(new ExitCommand(commandManager)); commandManager.register(new ExitCommand(commandManager));
commandManager.register(new InstanceCommand(commandManager));
commandManager.register(new RefreshCommand(commandManager));
return commandManager; return commandManager;
} }
@Deprecated
@SuppressWarnings("all") @SuppressWarnings("all")
private static void handleCommand(CommandManager commandManager, SystemInitializer systemInitializer) { private static void handleCommand(CommandManager commandManager, SystemInitializer systemInitializer) {
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);

View File

@@ -53,6 +53,12 @@ public abstract class AbstractInstance implements Instance {
*/ */
protected String value; protected String value;
/**
* 暂停状态
* <li> 默认为非暂停状态
*/
protected volatile boolean pause = false;
@Override @Override
public void refresh() { public void refresh() {
// 调用子类的初始化逻辑 // 调用子类的初始化逻辑
@@ -61,6 +67,8 @@ public abstract class AbstractInstance implements Instance {
@Override @Override
public void run() { public void run() {
if (isPause()) // 暂停态检查, 已暂停则不继续进行.
return;
value = query(); value = query();
final String ipAddress = NetworkContextHolder.getIpAddress(); final String ipAddress = NetworkContextHolder.getIpAddress();
try { try {
@@ -97,18 +105,22 @@ public abstract class AbstractInstance implements Instance {
this.name = name; this.name = name;
} }
@Override
public String getFatherName() { public String getFatherName() {
return fatherName; return fatherName;
} }
@Override
public void setFatherName(String fatherName) { public void setFatherName(String fatherName) {
this.fatherName = fatherName; this.fatherName = fatherName;
} }
@Override
public Long getInterval() { public Long getInterval() {
return interval; return interval;
} }
@Override
public void setInterval(Long interval) { public void setInterval(Long interval) {
this.interval = interval; this.interval = interval;
} }
@@ -128,10 +140,21 @@ public abstract class AbstractInstance implements Instance {
this.source = instanceSource; this.source = instanceSource;
} }
@Override
public InstanceSource getSource() { public InstanceSource getSource() {
return source; return source;
} }
@Override
public void setPause(boolean pause) {
this.pause = pause;
}
@Override
public boolean isPause() {
return pause;
}
/** /**
* 具体的初始化逻辑 * 具体的初始化逻辑
*/ */

View File

@@ -75,4 +75,20 @@ public interface Instance extends Runnable, Refreshable {
* @return 通过校验返回真, 否则返回假 * @return 通过校验返回真, 否则返回假
*/ */
boolean validate(); boolean validate();
/**
* 设置实例是否暂停
* <li> 暂停之后实力不会进行下一次活动, 不影响正在更新的实力。
* <li> 暂停态目前只有一个检查点, 详情见{@link AbstractInstance#run()}
* @param pause 暂停状态
*/
void setPause(boolean pause);
/**
* 判断实例是否处于暂停状态
* @return 暂停中返回真, 否则返回假
*/
default boolean isPause() {
return false;
}
} }

View File

@@ -171,7 +171,6 @@ public final class SystemInitializer implements Refreshable, Clearable {
// 添加进程结束钩子函数 // 添加进程结束钩子函数
Runtime.getRuntime().addShutdownHook(new Thread(() -> { Runtime.getRuntime().addShutdownHook(new Thread(() -> {
MDC.put("pid", SystemSupport.getPid());
log.info("程序正在关闭中, 可能需要一定时间."); log.info("程序正在关闭中, 可能需要一定时间.");
scheduledThreadPoolExecutor.shutdown(); scheduledThreadPoolExecutor.shutdown();
log.info("已关闭."); log.info("已关闭.");

View File

@@ -1,22 +0,0 @@
package com.serliunx.ddns.support;
import java.lang.management.ManagementFactory;
/**
* @author SerLiunx
* @since 1.0
*/
public final class SystemSupport {
private static final String PID;
static {
PID = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
}
private SystemSupport(){throw new UnsupportedOperationException();}
public static String getPid() {
return PID;
}
}

View File

@@ -0,0 +1,27 @@
package com.serliunx.ddns.support.command.cmd;
import com.serliunx.ddns.support.command.CommandManager;
import java.util.Arrays;
/**
* 实例相关指令
* @author <a href="mailto:serliunx@yeah.net">SerLiunx</a>
* @since 1.0.0
*/
public class InstanceCommand extends AbstractCommand {
public InstanceCommand(Command[] children, CommandManager commandManager) {
super("instance", children, commandManager);
}
public InstanceCommand(CommandManager commandManager) {
this(null, commandManager);
}
@Override
public boolean execute(String[] args) {
System.out.println(Arrays.toString(args));
return false;
}
}

View File

@@ -0,0 +1,23 @@
package com.serliunx.ddns.support.command.cmd;
import com.serliunx.ddns.support.command.CommandManager;
/**
* @author <a href="mailto:serliunx@yeah.net">SerLiunx</a>
* @since 1.0.0
*/
public class RefreshCommand extends AbstractCommand {
public RefreshCommand(Command[] children, CommandManager commandManager) {
super("refresh", children, commandManager);
}
public RefreshCommand(CommandManager commandManager) {
this(null, commandManager);
}
@Override
public boolean execute(String[] args) {
return false;
}
}

View File

@@ -0,0 +1,20 @@
package com.serliunx.ddns.support.log;
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
/**
* 日志变量%pid(进程id) 转换器
* @author <a href="mailto:serliunx@yeah.net">SerLiunx</a>
* @version 1.0.0
* @since 2024/6/15
*/
public class ProcessIdConverter extends ClassicConverter {
private static final String PROCESS_ID = java.lang.management.ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
@Override
public String convert(ILoggingEvent iLoggingEvent) {
return PROCESS_ID;
}
}

View File

@@ -1,9 +1,7 @@
package com.serliunx.ddns.thread; package com.serliunx.ddns.thread;
import com.serliunx.ddns.support.Assert; import com.serliunx.ddns.support.Assert;
import com.serliunx.ddns.support.SystemSupport;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.MDC;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -19,11 +17,7 @@ public class TaskThreadFactory implements ThreadFactory {
@Override @Override
public Thread newThread(@NotNull Runnable r) { public Thread newThread(@NotNull Runnable r) {
Assert.notNull(r); Assert.notNull(r);
Runnable runnable = () -> { return new Thread(r, String.format(getNamePattern(), count.getAndIncrement()));
MDC.put("pid", SystemSupport.getPid());
r.run();
};
return new Thread(runnable, String.format(getNamePattern(), count.getAndIncrement()));
} }
protected String getNamePattern() { protected String getNamePattern() {

View File

@@ -1,13 +1,15 @@
<configuration> <configuration>
<conversionRule conversionWord="pid" converterClass="com.serliunx.ddns.support.log.ProcessIdConverter"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder>
<pattern>%d{yyyy年MM月dd日 HH:mm:ss(SSS)} [%X{pid}] [%-15thread] [%level] %logger{16}: %msg%n</pattern> <pattern>%boldGreen(%d{yyyy年MM月dd日 HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %highlight([%-6level]) %boldYellow(%-45logger{32}): %highlight(%msg%n)</pattern>
</encoder> </encoder>
</appender> </appender>
<logger name="com.serliunx.ddns" level="INFO"/> <logger name="com.serliunx.ddns" level="INFO"/>
<root level="ERROR"> <root level="INFO">
<appender-ref ref="STDOUT" /> <appender-ref ref="STDOUT" />
</root> </root>
</configuration> </configuration>