javaspringspring-bootkotlinyaml

How to log the active configuration in a Spring Boot application?


I would really like to use YAML config for Spring Boot, as I find it quite readable and useful to have a single file showing what properties are active in my different profiles. Unfortunately, I'm finding that setting properties in application.yml can be rather fragile.

Things like using a tab instead of spaces will cause properties to not exist (without warnings as far as I can see), and all too often I find that my active profiles are not being set, due to some unknown issue with my YAML.

So I was wondering whether there are any hooks that would enable me to get hold of the currently active profiles and properties, so that I could log them.

Similarly, is there a way to cause start-up to fail if the application.yml contains errors? Either that or a means for me to validate the YAML myself, so that I could kill the start-up process.


Solution

  • I had the same problem, and wish there was a debug flag that would tell the profile processing system to spit out some useful logging. One possible way of doing it would be to register an event listener for your application context, and print out the profiles from the environment. I haven't tried doing it this way myself, so your mileage may vary. I think maybe something like what's outlined here:

    How to add a hook to the application context initialization event?

    Then you'd do something like this in your listener:

    System.out.println("Active profiles: " + Arrays.toString(ctxt.getEnvironment().getActiveProfiles()));
    

    Might be worth a try. Another way you could probably do it would be to declare the Environment to be injected in the code where you need to print the profiles. I.e.:

    @Component
    public class SomeClass {
      @Autowired
      private Environment env;
      ...
      private void dumpProfiles() {
        // Print whatever needed from env here
      }
    }