I have configured the git-commit-id
plugin as follows:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>6.0.0</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<includeOnlyProperties>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
<includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
<includeOnlyProperty>^git.dirty$</includeOnlyProperty>
</includeOnlyProperties>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
It works as expected and generates the following git.properties
file:
#Generated by Git-Commit-Id-Plugin
git.build.time=2023-07-13T14\:04\:21+0200
git.build.version=5.0-SNAPSHOT
git.commit.id.abbrev=753455c
git.commit.id.full=753455c7ae51f231cefda280e0508feeb3655f59
git.dirty=true
All good!
That file is saved in target/classes/git.properties
.
I have created the following PropertySourceConfig.java
file to import the properties from git.properites
:
package com.my.app.metrics;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
/**
* Generates beans with access to properties required for metrics
*/
@Component
public class PropertySourceConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer propsConfig
= new PropertySourcesPlaceholderConfigurer();
propsConfig.setLocation(new ClassPathResource("git.properties"));
propsConfig.setIgnoreResourceNotFound(true);
propsConfig.setIgnoreUnresolvablePlaceholders(true);
return propsConfig;
}
}
This works, I have added fields annotated with @Value()
pointing at the properties in git.properties
to one of my controllers, and can see the correct values in those fields when I run the debugger.
I have also added the following logback-spring.xml
file:
<configuration>
<springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="unknown" />
<springProperty scope="context" name="applicationVersion" source="project.version" defaultValue="unknown" />
<springProperty scope="context" name="commitId" source="git.commit.id.abbrev" defaultValue="unknown" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
Here's where my problems start.
spring.application.name
is picked up as expected.
project.version
(in application.properties
) is picked up too.
git.commit.id.abbrev
(in git.properties
) is not picked up, and so it shows up as "unknown" in the log output.
What is the issue here?
I want to say the logger is configured before the PropertySourceConfig
object is created, and so there is no reference to it when the logger starts.
If so, how can I fix that?
Maybe I can't. Perhaps the strategy should be to add is info as a separate metric and push it directly to CloudWatch
instead of including it in the logs at all?