如题,最近几个JBolt内部成员在问我,JBolt平台启动的时候,输出的环境信息很哇塞,想修改成自己公司的信息,增加点别的信息,如何搞?
效果看下图:

这个图里展示了好几个输出类型:
1、LOGO 品牌标识 域名信息 jbolt.cn
2、平台名称和版本 JBolt Platform Pro 4.1.2
3、JFinal JBolt_core Undertow等依赖版本信息 JVM版本信息等
4、启动服务的访问地址端口
5、日志信息
一、logo 品牌标识等输出
请看这个文章描述。
二、定制Undertow Server
package cn.jbolt.core.server;
import com.jfinal.config.JFinalConfig;
import com.jfinal.core.Const;
import com.jfinal.server.undertow.UndertowConfig;
import com.jfinal.server.undertow.UndertowServer;
import cn.jbolt.core.consts.JBoltConst;
import cn.jbolt.core.util.JBoltConsoleUtil;
import io.undertow.Version;
/**
* JBolt Undertow服务器封装
*
* @ClassName: JBoltServer
* @author: JFinal学院-小木 QQ:909854136
* @date: 2021年8月7日
*
*/
public abstract class JBoltServer extends UndertowServer {
protected JBoltServer(UndertowConfig undertowConfig) {
super(undertowConfig);
}
/**
* 获取平台名称
* @return
*/
public abstract String getProjectName();
/**
* 获取版本
* @return
*/
public abstract String getProjectVersion();
@Override
public synchronized void start() {
if (configConsumer != null) {
configConsumer.accept(config);
configConsumer = null; // 配置在整个生命周期只能调用一次
}
loadCommandLineParameter();
try {
JBoltConsoleUtil.printJboltcn();
String projectName = getProjectName();
String projectVersion = getProjectVersion();
System.out.println("-----------------------------------");
System.out.println("Starting " + projectName + " " + projectVersion + "...");
System.out.println("JVM : " + System.getProperty("java.version"));
System.out.println("JFinal : " + Const.JFINAL_VERSION);
System.out.println("JBolt Core : " + JBoltConst.JBOLT_VERSION);
System.out.println("Undertow Server : " + Version.getVersionString());
System.out.println("JFinal-Undertow : " + version);
System.out.println("Http URL : http://" + config.getHost() + ":" + config.getPort() + getContextPathInfo());
if (config.isSslEnable()) {
System.out.println("Https URL : https://" + config.getHost() + ":" + config.getSslConfig().getPort() + getContextPathInfo());
}
System.out.println("-----------------------------------");
long start = System.currentTimeMillis();
doStart();
System.out.println("-----------------------------------");
System.out.println(projectName + " " + projectVersion + " Startup Success in " + getTimeSpent(start) + " seconds(^_^)");
System.out.println("-----------------------------------");
/**
* 使用 kill pid 命令或者 ctrl + c 关闭 JVM 时,调用 UndertowServer.stop() 方法, 以便触发
* JFinalConfig.onStop();
*
* 注意:下方代码严格测试过,只支持 kill pid 不支持 kill -9 pid
*/
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
JBoltServer.this.stop();
}
});
} catch (Exception e) {
e.printStackTrace();
stopSilently();
// 支持在 doStart() 中抛出异常后退出 JVM,例如端口被占用,否则在 linux 控制台 JVM 并不会退出
System.exit(1);
}
}
@Override
public synchronized void stop() {
if (started) {
started = false;
} else {
return;
}
System.out.println("-----------------------------------");
System.out.println("Shutdown JBolt Server ......");
System.out.println("-----------------------------------");
long start = System.currentTimeMillis();
try {
if (hotSwapWatcher != null) {
hotSwapWatcher.exit();
}
doStop();
} catch (Exception e) {
e.printStackTrace();
stopSilently();
} finally {
System.out.println("-----------------------------------");
System.out.println("Shutdown Complete in " + getTimeSpent(start) + " seconds. See you later (^_^)");
System.out.println("-----------------------------------");
}
}
}这样就可以完美实现一个定制化的平台启动输出了。
三、日志标准化输出解决方案
【分享】使用JFinal4.8中的Slf4J日志门面配置,具体实现用Log4j2
加入并使用JBolt极速开发平台,获得JFinal最佳实践极速开发体验。
JBolt平台slogan:
省心,省事儿,降本增效,极速开发,JFinal社区600家企业的共同选择!
推荐: