SLF4J to jedna z najpopularniejszych bibliotek do Java, która umożliwia logowanie zdarzeń występujących w trakcie działania aplikacji, dlatego Spring Boot zaadoptował to rozwiązanie jako domyślne narzędzie do sporządzania logów aplikacji.
Wykorzystanie SLF4J w Spring Boot
W celu powołania instancji loggera wystarczy w ramach wybranej klasy skorzystać z metody wytwórczej: pochodzącej z LoggerFactory:
@Service public class UserService { private Logger logger = LoggerFactory.getLogger(UserDetails.class); }
Dobrą praktyką jest przekazanie do metody parametru reprezentującego klasę z której chcemy, aby logi pochodziły. Podczas, gdy złą praktyką będzie stworzenie jednego loggera na całą aplikacje, co czasami przychodzi do głowy młodym programistom mającą nadmierne tendencje do skracania kodu 🙂
Logowanie zdarzeń w SLF4J
Aby odnotować zdarzenie wystarczy odwołać się do instancji loggera i z pomocą jednej z metod reprezentujących poziom logowania wypisać zdarzenie, np:
@Service public class UserService { private Logger logger = LoggerFactory.getLogger(UserDetails.class); }
W rezultacie otrzymujemy log w konsoli, który zawiera dane, poziom, klasę z której pochodzi log, oraz jego tresć.

Klasa z której pochodzi log jest rezultatem odpowiedniego sparametryzowania metody wytwórczej, dlatego wspomniałem, że nie warto tworzyć jednej instancji logera na całą aplikacje. Oczywiście zbiór informacji wyświetlanych można swobodnie skonfigurować.
Poziomy logowania zdarzeń w SLF4J
Oprócz poziomu logowania INFO wykorzystanego w powyższym przykładzie mamy też dostępne inne, wszystkie one są zdefiniowane w ramach enum.
public enum LogLevel { TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF; private LogLevel() { } }
A zatem – teraz w kolejności od najmniej istotnego, do najwyższego:
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
Z tego powodu należy dobierać poziom logowania od intencji przekazywanego komunikatu.
Poniżej przykład wywołania wszystkich poziomów logowania:
public UserService() { logger.trace("Hello bycza zagroda!"); logger.info("Hello bycza zagroda!"); logger.debug("Hello bycza zagroda!"); logger.warn("Hello bycza zagroda!"); logger.error("Hello bycza zagroda!"); }

A zatem można się zastanowić – czemu 5-krotne wyświetlenie komunikatu dało rezultat w postaci tylko 3 wypisanych logów?
Dzieje się tak dlatego, ponieważ w Spring Boot domyślnym poziomem logowania jest INFO.
Zmiana poziomu logowania w Spring Boot
W application.properties można ustalić poziom logowania zdarzeń w konsoli. Domyślną wartością jest INFO, dlatego logi o poziomie mniej istotnym zostają pominięte.
Aby zmienić ustawienia domyślne wystarczy przypisać dla klucza logging.level.root poziom logowania, który chcemy mieć w aplikacji np.:
Podsumowanie
Z pewnością logowanie pozwala na gromadzenie uporządkowanych informacji zdobytych w trakcie działania aplikacji. SLF4J to tylko przykładowe narzędzie, istnieją również inne tego samego przeznaczenia np. Log4J. W rezultacie w aplikacji powinniśmy zapomnieć o wszystkich operacjach wyjścia typu System.out i zamienić je na profesjonale loggery 🙂