|
21 | 21 | import com.swirlds.component.framework.model.DeterministicWiringModel; |
22 | 22 | import com.swirlds.component.framework.model.WiringModelBuilder; |
23 | 23 | import com.swirlds.config.api.Configuration; |
| 24 | +import com.swirlds.logging.legacy.LogMarker; |
24 | 25 | import com.swirlds.metrics.api.Metrics; |
25 | 26 | import com.swirlds.platform.builder.PlatformBuilder; |
26 | 27 | import com.swirlds.platform.builder.PlatformBuildingBlocks; |
27 | 28 | import com.swirlds.platform.builder.PlatformComponentBuilder; |
| 29 | +import com.swirlds.platform.builder.internal.StaticPlatformBuilder; |
28 | 30 | import com.swirlds.platform.config.PathsConfig; |
29 | 31 | import com.swirlds.platform.state.service.PlatformStateFacade; |
30 | 32 | import com.swirlds.platform.state.service.PlatformStateService; |
|
88 | 90 | */ |
89 | 91 | public class TurtleNode extends AbstractNode implements Node, TurtleTimeManager.TimeTickReceiver { |
90 | 92 | private static final Logger log = LogManager.getLogger(); |
| 93 | + /** |
| 94 | + * Logger for startup messages that should appear in per-node logs (uses platform package to bypass org.hiero.otter |
| 95 | + * exclusion) |
| 96 | + */ |
| 97 | + private static final Logger startupLogger = LogManager.getLogger("com.swirlds.platform.node.startup"); |
91 | 98 |
|
92 | 99 | private final Randotron randotron; |
93 | 100 | private final TurtleTimeManager timeManager; |
@@ -160,6 +167,9 @@ protected void doStart(@NonNull final Duration timeout) { |
160 | 167 | throwIfInLifecycle(RUNNING, "Node has already been started."); |
161 | 168 | throwIfInLifecycle(DESTROYED, "Node has already been destroyed."); |
162 | 169 |
|
| 170 | + // Log the startup message using the same STARTUP marker and message as production nodes |
| 171 | + // Uses a platform logger to ensure it routes through per-node appenders |
| 172 | + startupLogger.info(LogMarker.STARTUP.getMarker(), "\n\n" + StaticPlatformBuilder.STARTUP_MESSAGE + "\n"); |
163 | 173 | if (savedStateDirectory != null) { |
164 | 174 | try { |
165 | 175 | OtterSavedStateUtils.copySaveState(selfId, savedStateDirectory, outputDirectory); |
@@ -291,6 +301,7 @@ protected void doStart(@NonNull final Duration timeout) { |
291 | 301 |
|
292 | 302 | platform = platformComponentBuilder.build(); |
293 | 303 | platformStatus = PlatformStatus.STARTING_UP; |
| 304 | + |
294 | 305 | platform.start(); |
295 | 306 |
|
296 | 307 | quiescenceCommand = QuiescenceCommand.DONT_QUIESCE; |
@@ -444,6 +455,7 @@ public SingleNodeReconnectResult newReconnectResult() { |
444 | 455 | public SingleNodeMarkerFileResult newMarkerFileResult() { |
445 | 456 | return new SingleNodeMarkerFileResultImpl(resultsCollector); |
446 | 457 | } |
| 458 | + |
447 | 459 | /** |
448 | 460 | * {@inheritDoc} |
449 | 461 | */ |
|
0 commit comments