StartupInfoLogger Class — spring-boot Architecture
Architecture documentation for the StartupInfoLogger class in StartupInfoLogger.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java lines 41–166
class StartupInfoLogger {
private final @Nullable Class<?> sourceClass;
private final Environment environment;
StartupInfoLogger(@Nullable Class<?> sourceClass, Environment environment) {
this.sourceClass = sourceClass;
this.environment = environment;
}
void logStarting(Log applicationLog) {
Assert.notNull(applicationLog, "'applicationLog' must not be null");
applicationLog.info(LogMessage.of(this::getStartingMessage));
applicationLog.debug(LogMessage.of(this::getRunningMessage));
}
void logStarted(Log applicationLog, Startup startup) {
if (applicationLog.isInfoEnabled()) {
applicationLog.info(getStartedMessage(startup));
}
}
private CharSequence getStartingMessage() {
StringBuilder message = new StringBuilder();
message.append("Starting");
appendAotMode(message);
appendApplicationName(message);
appendApplicationVersion(message);
appendJavaVersion(message);
appendPid(message);
appendContext(message);
return message;
}
private CharSequence getRunningMessage() {
StringBuilder message = new StringBuilder();
message.append("Running with Spring Boot");
appendVersion(message, getClass());
message.append(", Spring");
appendVersion(message, ApplicationContext.class);
return message;
}
private CharSequence getStartedMessage(Startup startup) {
StringBuilder message = new StringBuilder();
message.append(startup.action());
appendApplicationName(message);
message.append(" in ");
message.append(startup.timeTakenToStarted().toMillis() / 1000.0);
message.append(" seconds");
Long uptimeMs = startup.processUptime();
if (uptimeMs != null) {
double uptime = uptimeMs / 1000.0;
message.append(" (process running for ").append(uptime).append(")");
}
return message;
}
private void appendAotMode(StringBuilder message) {
append(message, "", () -> AotDetector.useGeneratedArtifacts() ? "AOT-processed" : null);
}
private void appendApplicationName(StringBuilder message) {
append(message, "",
() -> (this.sourceClass != null) ? ClassUtils.getShortName(this.sourceClass) : "application");
}
private void appendVersion(StringBuilder message, Class<?> source) {
append(message, "v", () -> source.getPackage().getImplementationVersion());
}
private void appendApplicationVersion(StringBuilder message) {
append(message, "v", () -> this.environment.getProperty("spring.application.version"));
}
private void appendPid(StringBuilder message) {
append(message, "with PID ", () -> this.environment.getProperty("spring.application.pid"));
}
private void appendContext(StringBuilder message) {
StringBuilder context = new StringBuilder();
ApplicationHome home = new ApplicationHome(this.sourceClass);
if (home.getSource() != null) {
context.append(home.getSource().getAbsolutePath());
}
append(context, "started by ", () -> System.getProperty("user.name"));
append(context, "in ", () -> System.getProperty("user.dir"));
if (!context.isEmpty()) {
message.append(" (");
message.append(context);
message.append(")");
}
}
private void appendJavaVersion(StringBuilder message) {
append(message, "using Java ", () -> System.getProperty("java.version"));
}
private void append(StringBuilder message, String prefix, Callable<@Nullable Object> call) {
append(message, prefix, call, "");
}
private void append(StringBuilder message, String prefix, Callable<@Nullable Object> call, String defaultValue) {
Object result = callIfPossible(call);
String value = (result != null) ? result.toString() : null;
if (!StringUtils.hasLength(value)) {
value = defaultValue;
}
if (StringUtils.hasLength(value)) {
message.append((!message.isEmpty()) ? " " : "");
message.append(prefix);
message.append(value);
}
}
private @Nullable Object callIfPossible(Callable<@Nullable Object> call) {
try {
return call.call();
}
catch (Exception ex) {
return null;
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free