fix: 启动/激活日志改走 logback 落盘(System.out 服务运行时不可见)

- HospitalFrontApp:启动完成日志带 PID/激活医院/端口,改 SLF4J;停机钩子同步改
- HospitalRouter:构造器激活医院日志改 SLF4J
- 移除上轮联调遗留的异常因果链诊断代码

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-27 17:16:14 +08:00
co-authored by Claude
parent b01d5d1d7a
commit 8b32335eee
3 changed files with 18 additions and 22 deletions
@@ -1,12 +1,13 @@
package com.hospital.front; package com.hospital.front;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import org.noear.solon.Solon; import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain; import org.noear.solon.annotation.SolonMain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* 医院前置机主程序启动类。 * 医院前置机主程序启动类。
@@ -20,29 +21,19 @@ import org.noear.solon.annotation.SolonMain;
@SolonMain @SolonMain
public class HospitalFrontApp { public class HospitalFrontApp {
private static final Logger log = LoggerFactory.getLogger(HospitalFrontApp.class);
/** /**
* 主入口。 * 主入口。
*/ */
public static void main(String[] args) { public static void main(String[] args) {
// TODO 临时诊断代码:打印完整异常因果链,定位注入失败根因后移除 Solon.start(HospitalFrontApp.class, args);
try {
Solon.start(HospitalFrontApp.class, args);
} catch (Throwable e) {
Throwable t = e;
int depth = 0;
while (t != null && depth < 10) {
System.err.println("=== 因果链[" + depth + "]: " + t.getClass().getName() + ": " + t.getMessage());
StackTraceElement[] stackTrace = t.getStackTrace();
for (int i = 0; i < Math.min(10, stackTrace.length); i++) {
System.err.println(" at " + stackTrace[i]);
}
t = t.getCause();
depth++;
}
System.exit(1);
}
long pid = ProcessHandle.current().pid(); long pid = ProcessHandle.current().pid();
System.out.println("[HospitalFront] 启动完成,PID=" + pid); // 走 logback 落盘(服务方式运行时控制台不可见,System.out 进不了日志文件)
log.info("启动完成,PID={},激活医院={},端口={}",
pid,
Solon.cfg().get("hospital.active", "?"),
Solon.cfg().get("server.port", "?"));
// 写 PID 文件(供 start.bat stop / Agent 升级流程强杀使用) // 写 PID 文件(供 start.bat stop / Agent 升级流程强杀使用)
try { try {
File dir = new File("pid"); File dir = new File("pid");
@@ -58,7 +49,7 @@ public class HospitalFrontApp {
new File("pid/hospital-front.pid").delete(); new File("pid/hospital-front.pid").delete();
} catch (Exception ignored) { } catch (Exception ignored) {
} }
System.out.println("[HospitalFront] 优雅停机中..."); log.info("优雅停机中...");
})); }));
} }
} }
@@ -2,6 +2,8 @@ package com.hospital.front.adapter;
import org.noear.solon.Solon; import org.noear.solon.Solon;
import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -17,6 +19,8 @@ import java.util.Set;
@Component @Component
public class HospitalRouter { public class HospitalRouter {
private static final Logger log = LoggerFactory.getLogger(HospitalRouter.class);
/** 启动激活的医院编码(默认 jinghe) */ /** 启动激活的医院编码(默认 jinghe) */
private final String activeCode = Solon.cfg().get("hospital.active", "jinghe"); private final String activeCode = Solon.cfg().get("hospital.active", "jinghe");
@@ -24,7 +28,8 @@ public class HospitalRouter {
private volatile Map<String, HospitalAdapter> map; private volatile Map<String, HospitalAdapter> map;
public HospitalRouter() { public HospitalRouter() {
System.out.println("[HospitalRouter] 启动激活医院:" + activeCode); // 走 logback 落盘(服务方式运行时 System.out 进不了日志文件)
log.info("启动激活医院:{}", activeCode);
} }
/** /**
+1 -1
View File
@@ -69,7 +69,7 @@ logging:
level: level:
root: INFO root: INFO
com.hospital.front: INFO com.hospital.front: INFO
org.noear: WARN org.noear: INFO
# ==================================== # ====================================
# Uptime-Kuma 监控(沿用原 hospitalmiddle 逻辑) # Uptime-Kuma 监控(沿用原 hospitalmiddle 逻辑)