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.
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?