Jak zmienić poziom logowania w Spring Boot w runtime

Jak zmienić poziom logowania w Spring Boot w runtime

Logi często są jedną z pierwszych rzeczy, które czytasz aby zobaczyć co się dzieje z aplikacją. Przy większych systemach takich logów może być wiele. Niektóre mogą być nadmiarowe w danym momencie, inne mogą mieć nie poprawny poziom logowania. Aby w łatwy sposób odnaleźć się w logach, powinieneś móc łatwo je wyfiltrować. W poniższym wpisie opiszę kilka sposobów, jak można zmienić poziom logowania w runtime dla aplikacji napisanych przy użyciu spring boota.

Logback

Logback jest defaultowym frameworkiem do logowania w spring boocie. Posiada on możliwość skanowania co określony czas pliku konfiguracyjnego poprzez dodanie do niego:

<configuration debug="true" scan="true" scanPeriod="15 seconds">

Dzięki temu można wprowadzić w nim zmiany, które zostaną wczytane podczas następnego skanowania. Oprócz tego w zmiennych aplikacji można przekazać parametr

-Dlogback.configurationFile=/path/to/config.xml

który wskazuje zewnętrzny plik z configiem dla logbacka. Nic nie stoi na przeszkodzie aby w application.yml wskazać zmienną dla propertisu, który też wskazuje na ten config.

logging.config

Niestety jeśli używasz logback spring boot extension, to skanowanie nie działa.

Na pewno logback jest bardzo uniwersalnym  i w sumie prostym sposobem zmiany poziomu logowania w runtime. Możesz go używać nie tylko ze spring bootem ale również innymi frameworkami.
Niestety oprócz tego ma parę wad. Do pierwszych z nich należy ręczna zmiana pliku, wobec tego zawsze istnieje ryzyko pomyłki. Jeśli pracujesz w środowisku cloudowym to także problematyczna może być zmiana tego pliku.

Jak zmienić poziom logowania w Spring Boot w runtimie
Jak zmienić poziom logowania w Spring Boot w runtimie

Actuator

Kolejnym sposobem zmiany poziomu logowania jest użycie dobrze znanego actuatora. Oprócz wielu endpointow do sprawdzania stanu aplikacji ma on również endpointy związane z wyświetlaniem i zmienianiem poziomu logowania.

Aby wyświetlić wszystkie loggery w aplikacji użyj końcowki restowej

GET /actuator/loggers

Aby zobaczyć specyficzny logger

GET /actuator/loggers/org.apache.kafka

A żeby zmienić poziom logowania wywołaj

POST /actuator/loggers/org.apache.kafka
{
     "configuredLevel": "INFO"
}

Użycie actuatora jest chyba najłatwiejszym sposobem zmiany poziomu logowania dla spring boota. Wystarczy tylko dodać dependencje do actuatora i w application.yml dodać

management:
    endpoints:
        web:
            exposure:
                include: loggers

Spring Boot Admin

Spring boot admin jest UI dla actuatora. Wyświetla wiele metryk aplikacji a jednocześnie pozwala modyfikować poziom logowania. Niestety to rozwiązanie ma jedną dużą wadę. Działa dobrze gdy endpointy do zmiany poziomu logowania są niezabezpieczone lub używają Basic Auth. W innych przypadkach skorzystanie z admina jest bardziej skomplikowane. Oczywiście nie możesz tez zapomnieć o zabezpieczeniu samego Spring Boot admina.

Jak zmienić poziom logowania – podsumowanie

Jak zawsze wszystko zależy od konkretnej sytuacji i tego czego potrzebujesz. Rozwiązaniem najbardziej uniwersalnym jest skorzystanie z logbacka. Jeśli używasz actuatora to będzie to najłatwiejsza opcja. A jeśli zależy Ci na interfejsie webowym skorzystaj z Spring Boot Admina.
Może, jeszcze znasz jakieś inne sposoby jak zmienić poziom logowania w spring boocie w runtimie?