diff --git a/build.gradle.kts b/build.gradle.kts index 9898e8f..b37b56f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,6 +62,7 @@ subprojects { extra.apply { set("creekBaseVersion", "0.2.0-SNAPSHOT") set("creekTestVersion", "0.2.0-SNAPSHOT") + set("creekObsVersion", "0.2.0-SNAPSHOT") set("spotBugsVersion", "4.6.0") // https://mvnrepository.com/artifact/com.github.spotbugs/spotbugs-annotations set("log4jVersion", "2.19.0") // https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core diff --git a/resource/build.gradle.kts b/resource/build.gradle.kts index fd39481..bfc3859 100644 --- a/resource/build.gradle.kts +++ b/resource/build.gradle.kts @@ -3,8 +3,10 @@ plugins { } val creekBaseVersion : String by extra +val creekObsVersion : String by extra dependencies { api(project(":metadata")) implementation("org.creekservice:creek-base-type:$creekBaseVersion") + implementation("org.creekservice:creek-observability-logging:$creekObsVersion") } diff --git a/resource/src/main/java/module-info.java b/resource/src/main/java/module-info.java index 14ae20c..6a90ff9 100644 --- a/resource/src/main/java/module-info.java +++ b/resource/src/main/java/module-info.java @@ -1,6 +1,7 @@ module creek.platform.resource { requires transitive creek.platform.metadata; requires creek.base.type; + requires creek.observability.logging; exports org.creekservice.api.platform.resource; } diff --git a/resource/src/main/java/org/creekservice/api/platform/resource/ResourceInitializer.java b/resource/src/main/java/org/creekservice/api/platform/resource/ResourceInitializer.java index daed4de..8807fd1 100644 --- a/resource/src/main/java/org/creekservice/api/platform/resource/ResourceInitializer.java +++ b/resource/src/main/java/org/creekservice/api/platform/resource/ResourceInitializer.java @@ -33,6 +33,8 @@ import java.util.stream.Stream; import org.creekservice.api.base.annotation.VisibleForTesting; import org.creekservice.api.base.type.CodeLocation; +import org.creekservice.api.observability.logging.structured.StructuredLogger; +import org.creekservice.api.observability.logging.structured.StructuredLoggerFactory; import org.creekservice.api.platform.metadata.ComponentDescriptor; import org.creekservice.api.platform.metadata.ResourceDescriptor; import org.creekservice.api.platform.metadata.ResourceHandler; @@ -52,6 +54,9 @@ */ public final class ResourceInitializer { + private static final StructuredLogger LOGGER = + StructuredLoggerFactory.internalLogger(ResourceInitializer.class); + private final ResourceHandlers handlers; private final ComponentValidator componentValidator; @@ -86,6 +91,10 @@ public static ResourceInitializer resourceInitializer(final ResourceHandlers han * @param components components to search for resources. */ public void init(final Collection components) { + LOGGER.debug( + "Initializing resources", + log -> log.with("stage", "init").with("components", componentNames(components))); + ensureResources( groupById( components, @@ -101,6 +110,10 @@ public void init(final Collection components) { * @param components components to search for resources. */ public void service(final Collection components) { + LOGGER.debug( + "Initializing resources", + log -> log.with("stage", "service").with("components", componentNames(components))); + ensureResources( groupById( components, @@ -122,6 +135,13 @@ public void test( final Collection componentsUnderTest, final Collection otherComponents) { + LOGGER.debug( + "Initializing resources", + log -> + log.with("stage", "test") + .with("components_under_test", componentNames(componentsUnderTest)) + .with("other_components", componentNames(otherComponents))); + final Map> unowned = groupById( componentsUnderTest, @@ -221,6 +241,11 @@ private static String formatResource(final ResourceDescriptor descriptor) { return "(" + CodeLocation.codeLocation(descriptor) + ") " + descriptor; } + private static List componentNames( + final Collection components) { + return components.stream().map(ComponentDescriptor::name).collect(Collectors.toList()); + } + private static class ResourceDescriptorMismatchException extends RuntimeException { ResourceDescriptorMismatchException( final String msg, final List descriptors) {