Jak wyświetlić timestampy w logach Mavena

Czyli sposób na analizowanie czasu budowy projektu i znajdowanie problemów wydajnościowych

Jak wyświetlić timestampy w logach Mavena

Wstęp

Czym jest tytułowy Maven? Maven to popularne narzędzie do zarządzania projektami. Pozwala zarządzać budowaniem, raportami i dokumentacją projektu. Jest produktem organizacji non-profit działającej pod nazwą Apache Software Foundation. Organizacja ta zrzesza programistów pracujących nad otwartym oprogramowaniem (ang. Open Source).

Maven rozwiązuje problem długiego procesu wytwarzania oprogramowania i braku standardów przeprowadzania tego procesu. Maven pozwala programistom:

  • Uprościć proces budowania projektu
  • Ujednolicić sposób budowania projektu poprzez używanie tzw. Project Object Model (w skrócie POM) oraz pluginów
  • Dostarczać przydatne informacje o projekcie
  • Promować najlepsze praktyki wytwarzania oprogramowania
UWAGA!
Maven to narzędzie napisane w Javie. Oznacza to, że do jego poprawnego działania wymagana jest wcześniejsza instalacja Javy.

Podstawy budowania projektu

Gdy w terminalu wpiszemy polecenie mvn --help zostanie wyświetlony sposób w jaki używa się komendę mvn:

mvn [options] [<goal(s)>] [<phase(s)>]

Na potrzeby tego artykułu wraz z komendą mvn użyjemy dwie fazy (ang. phases), które w dużym uproszczeniu czyszczą projekt (faza clean), budują i instalują go w naszym lokalnym repozytorium Mavena (faza install). Lokalne repozytorium Mavena można znaleźć pod ścieżką /home/javowiec/.m2/repository i znajdują się tam artefakty, których można używać w różnych projektach.

Wszystkie kolejne polecenia będę uruchamiać dla tego projektu:

javowiec-pl-java/optional-orElse-vs-orElseGet at main · JavowiecPL/javowiec-pl-java
Gotowe projekty z kategorii Java stworzone na potrzeby postów publikowanych na blogu Javowiec.pl - javowiec-pl-java/optional-orElse-vs-orElseGet at main · JavowiecPL/javowiec-pl-java

Przyszedł zatem czas, aby zademonstrować budowanie projektu. Wykonajmy polecenie mvn clean install:

Czyszczenie, budowanie i instalowanie projektu w lokalnym repozytorium Mavena

Z początku logi Mavena mogą wydawać się przytłaczające i mało zrozumiałe, jednak zmienia się to po bliższym zapoznaniu z tym narzędziem.

Na zielono widać cele (ang. goals, poprzedzone znakami ---) jakie Maven uruchamia pokolei by faza została wykonana. Na końcu mamy informację BUILD SUCCESS, która informuje o pomyślnym zbudowaniu projektu. Niepomyślna budowa projektu sygnalizowana jest czerwonym napisem BUILD FAILURE.

Niepomyślna budowa projektu. Literówka w nazwie fazy: installl zamiast install

Na końcu logów Maven podaje nam również czas wykonania budowy projektu: Total time i kiedy została zakończona: Finished at. Jednakże nie posiadamy bardziej szczegółowych informacji typu: jak długo trwa wykonanie poszczególnych celów?

Gdy nasz projekt składa się z wielu modułów (np. ponad 80), logi Mavena potrafią być bardzo długie. Znalezienie zbyt długiego czasu wykonania jakiegoś celu ułatwia w takim przypadku włączenie wyświetlania timestampów. Timestamp to znacznik czasu, który pozwala ustalić kiedy jakieś zdarzenie miało miejsce. Mając włączone timestampy możemy na spokojnie przeanalizować logi i znaleźć problem powodujący zbyt długi czas budowania projektu.

Włączanie timestampów w logach

Timestampy możemy włączyć tymczasowo (czyli na czas wykonania pojedynczej budowy projektu) i na stałe. Potrzebne są nam do tego dwie właściwości systemowe:

  • org.slf4j.simpleLogger.showDateTime - przyjmuje wartości true lub false i wskazuje czy timestampy będą wyświetlane lub nie
  • org.slf4j.simpleLogger.dateTimeFormat - wskazuje w jakim formacie wg wzorca SimpleDateFormat będą wyświetlane timestampy np. HH:mm:ss,SSS.

Timestampy po włączeniu będą wyświetlane po lewej stronie terminala, przed wiadomościami [INFO], [WARNING] czy [ERROR].

Więcej informacji na temat ustawień logów Mavena znajdziesz w dokumentacji.

Tymczasowo

Timestampy można włączyć tymczasowo poprzez dodanie do polecenia następujących parametrów: -Dorg.slf4j.simpleLogger.showDateTime=true i -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS:

mvn clean install -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS
Włączenie timestampów z poziomu wiersza poleceń

Na stałe

W pliku $MAVEN_HOME/conf/logging/simplelogger.properties ustaw parametry org.slf4j.simpleLogger.showDateTime=true i org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS, a następnie zrestartuj terminal. Aby wyświetlić wartość zmiennej środowiskowej $MAVEN_HOME wystarczy uruchomić polecenie echo $MAVEN_HOME w terminalu.

Włączenie timestampów z poziomu pliku konfiguracyjnego simplelogger.properties

Po tej zmianie nie będziemy musieli już podawać parametrów włączających timestampy w wierszu poleceń. Będą one włączone do czasu aż tego nie zmienimy w pliku simplelogger.properties.

Włączone timestampy po przeprowadzonej zmianie w pliku konfiguracyjnym simplelogger.properties

Zapis logów do pliku

Logi Mavena mogą zostać zapisane do pliku poprzez dodanie opcji --log-file lub krótszej wersji -l i podanie nazwy pliku w poleceniu:

mvn clean install --log-file nazwa-pliku.txt
mvn clean install -l nazwa-pliku.txt

Jednak ten sposób nie wyświetla logów w terminalu. Aby zapisywać logi do pliku i jednocześnie widzieć je w terminalu użyj polecenia:

mvn clean install 2>&1 | tee nazwa-pliku.txt

Podsumowanie

Znajomość sposobu włączania timestampów w logach Mavena pozoliła mi na znalezienie poważnego problemu wydajnościowego w procesie budowania projektu w mojej pracy. Oczywiście następnie go naprawiłem 😉

Do włączania timestampów służą dwa parametry: org.slf4j.simpleLogger.showDateTime ustawiony na true i org.slf4j.simpleLogger.dateTimeFormat, w którym podajemy format timestampa (np. HH:mm:ss,SSS).

Timestampy możemy włączyć tymczasowo przy pomocy wiersza poleceń lub na stałe przy pomocy pliku konfiguracyjnego $MAVEN_HOME/conf/logging/simplelogger.properties.

Logi możemy zapisać do pliku poprzez dodanie na końcu polecenia Mavena opcji --log-file lub jej skróconej formy -l i podanie nazwy pliku.

Aby równocześnie widzieć logi w terminalu i zapisywać je do pliku dodaj na końcu polecenia Mavena: 2>&1 | tee nazwa-pliku.txt.

Liczba komentarzy:

Zaloguj się lub dołącz do społeczności Javowców, aby móc uczestniczyć w dyskusji 🙂