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;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.noear.solon.Solon;
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
public class HospitalFrontApp {
private static final Logger log = LoggerFactory.getLogger(HospitalFrontApp.class);
/**
* 主入口。
*/
public static void main(String[] args) {
// TODO 临时诊断代码:打印完整异常因果链,定位注入失败根因后移除
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);
}
Solon.start(HospitalFrontApp.class, args);
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 升级流程强杀使用)
try {
File dir = new File("pid");
@@ -58,7 +49,7 @@ public class HospitalFrontApp {
new File("pid/hospital-front.pid").delete();
} 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.annotation.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
@@ -17,6 +19,8 @@ import java.util.Set;
@Component
public class HospitalRouter {
private static final Logger log = LoggerFactory.getLogger(HospitalRouter.class);
/** 启动激活的医院编码(默认 jinghe) */
private final String activeCode = Solon.cfg().get("hospital.active", "jinghe");
@@ -24,7 +28,8 @@ public class HospitalRouter {
private volatile Map<String, HospitalAdapter> map;
public HospitalRouter() {
System.out.println("[HospitalRouter] 启动激活医院:" + activeCode);
// 走 logback 落盘(服务方式运行时 System.out 进不了日志文件)
log.info("启动激活医院:{}", activeCode);
}
/**
+1 -1
View File
@@ -69,7 +69,7 @@ logging:
level:
root: INFO
com.hospital.front: INFO
org.noear: WARN
org.noear: INFO
# ====================================
# Uptime-Kuma 监控(沿用原 hospitalmiddle 逻辑)