Jak zmienić poziom logowania Maven, aby wyświetlał tylko ostrzeżenia i błędy?


142

Chcę, aby maven nie wyświetlał komunikatów INFO, chcę widzieć tylko OSTRZEŻENIA i BŁĘDY (jeśli istnieją).

Jak mogę to osiągnąć, najlepiej zmieniając wiersz poleceń, który wywołuje maven?


Powiązany temat: stackoverflow.com/questions/71069/… . -B, --batch-modelub -qbędzie mvnmniej gadatliwy.
— Stanislav,

Odpowiedzi:


108

Odpowiadając na Twoje pytanie

Zrobiłem małe dochodzenie, ponieważ jestem również zainteresowany rozwiązaniem.

Opcje oznajmiania wiersza poleceń Mavena

Według http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option

  • -e dla błędu
  • -X do debugowania
  • -q tylko dla błędu

Plik konfiguracyjny rejestrowania Maven

Obecnie maven 3.1.x używa SLF4J do logowania się do System.out. Możesz zmodyfikować ustawienia logowania w pliku:

${MAVEN_HOME}/conf/logging/simplelogger.properties

Według strony: http://maven.apache.org/maven-logging.html

Konfiguracja wiersza poleceń

Myślę, że powinieneś być w stanie ustawić domyślny poziom dziennika prostego rejestratora za pomocą parametru wiersza poleceń, na przykład:

$ mvn clean package -Dorg.slf4j.simpleLogger.defaultLogLevel=debug

Ale nie mogłem zmusić go do pracy . Myślę, że jedynym problemem jest to, że maven wybiera domyślny poziom z pliku konfiguracyjnego w ścieżce klas. Wypróbowałem także kilka innych ustawień za pośrednictwem System.properties, ale wszystkie z nich się nie powiodły.

dodatek

Możesz znaleźć źródło slf4j na github tutaj: slf4j github

Źródło simpleelogger tutaj: simpleeloggera slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Moduł ładujący plexus ładuje plik simplelogger.properties.


2
czy simplelogger.propertieszmiana zadziałała? Kiedy zmieniam org.slf4j.simpleLogger.warnLevelStringustawienie, mvn compileaktualizuje się odpowiednio, ale wydaje się, że je ignoruje org.slf4j.simpleLogger.defaultLogLevel. Rejestruje również na poziomie informacyjnym, nawet jeśli ustawię ostrzeżenie lub błąd.
— Alden

1
@Alden, mam takie samo zachowanie. jest po prostu ignorowany.
— jax

18
U mnie okazało się, że dodanie "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" do komendy budowania nie daje żadnego efektu. Jeśli zdefiniuję to przed kompilacją w MAVEN_OPTS w ten sposób: export "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", to działa idealnie bez zmiany pliku $ {MAVEN_HOME} /conf/logging/simplelogger.properties .
— Gábor Lipták,

1
Alden, Gábor Lipták: i dla mnie żadna z dwóch metod nie działa. :( Używam Mavena 3.2.5.
— Greg Dubicki

1
jeśli windows, w pliku bat, użyj set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
— feilong

45

Linux:

mvn validate clean install | egrep -v "(^\[INFO\])"

lub

mvn validate clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"

Okna:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"

5
ale jeśli chodzi o zmniejszenie zbędnych IO podczas mvn ... to naprawdę nie działa
— HoaPhan

Jak możemy osiągnąć to samo na komputerze z systemem Windows, ponieważ egrep na nim nie działa?
— hemanto

coś w stylumvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
— Tom H

Wygląda na to, że findstrobsługuje wyrażenia regularne i inne opcje, które mogą sprawić, że będzie bardziej zwięzły - ss64.com/nt/findstr.html
— Tom H

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
— Tom H,

32

Możesz to osiągnąć na przykład za pomocą MAVEN_OPTS
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Zamiast umieszczać właściwość systemową bezpośrednio w wierszu poleceń. (Przynajmniej dla maven 3.3.1.)

Rozważ użycie ~/.mavenrcdo ustawienia, MAVEN_OPTSjeśli chcesz zmienić rejestrowanie dla swojego loginu we wszystkich wywołaniach maven.


2
Wydaje się, że to działa, ponieważ mogłem wyłączyć ostrzeżenia i komunikaty informacyjne, ustawiając poziom na błąd, ale niestety wyłączyło to również zwykłe wyjście. W rzeczywistości próbowałem wyłączyć niektóre ostrzeżenia podczas uruchamiania help:evaluatecelu, aby wydrukować wartość, project.versiona to wyjście (choć nie wydaje się, slf4jże wychodzi) również zostało wyłączone.
— haridsv

Jedyna odpowiedź, która działa bez ciągłego zakłócania instalacji Mavena. Kolejny powód, dla którego Maven jest dinozaurem w systemie kompilacji - po prostu nie obsługuje wymagań zdrowego rozsądku.
— Abhijit Sarkar

16

Jeśli używasz Logback, po prostu umieść ten logback-test.xmlplik w src/test/resourceskatalogu:

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>
</configuration>

3

możesz to osiągnąć, używając poniżej w samym wierszu poleceń

 -e for error
-X for debug
-q for only error

np .:

mvn test -X -DsomeProperties='SomeValue' [For Debug level Logs]
mvn test -e -DsomeProperties='SomeValue' [For Error level Logs]
mvn test -q -DsomeProperties='SomeValue' [For Only Error Logs]


2

Niestety, nawet w przypadku maven 3 jedynym sposobem na to jest łatanie kodu źródłowego.

Oto krótka instrukcja, jak to zrobić.

Clone or fork Maven 3 repo: „git clone https://github.com/apache/maven-3.git ”

Edytuj rejestrowanie org.apache.maven.cli.MavenCli # i zmień

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

do

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

W obecnej wersji migawki znajduje się w linii 270

Następnie uruchom "mvn install", twoja nowa dystrybucja Maven będzie zlokalizowana w folderze "apache-maven \ target \"

Zobacz tę różnicę w celach informacyjnych: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
Ta odpowiedź jest obecnie PRZESTARZAŁA - a) adres URL repozytorium zmienił się, b) w tym kodzie nie ma instrukcji poziomu INFO, c) adres URL diff nie działa.
— Greg Dubicki

Nie ma znaczenia, gdzie kod używa INFO - podczas tworzenia wtyczek, twoje mojo powinno polegać na loggerze maven z getLog()- jeśli możesz żyć z konfigurowalnością.
— Adam,

1

Najprostszym sposobem jest uaktualnienie do wersji Maven 3.3.1 lub nowszej, aby skorzystać z${maven.projectBasedir}/.mvn/jvm.config wsparcia.

Następnie można użyć dowolne opcje z Maven za SL4FJ za SimpleLogger wsparcia skonfigurować wszystkie rejestratory lub poszczególne rejestratory. Na przykład, oto jak zrobić wszystkie ostrzeżenia na warnpoziomie, z wyjątkiem PMD, dla którego skonfigurowano logowanie na error:

cat .mvn/jvm.config
-Dorg.slf4j.simpleLogger.defaultLogLevel=warn -Dorg.slf4j.simpleLogger.log.net.sourceforge.pmd=error

Zobacz tutaj, aby uzyskać więcej informacji na temat logowania za pomocą Mavena.


1

Zmiana infoaby errorwsimplelogging.properties pliku pomoże w osiągnięciu swoje wymagania.

Po prostu zmień wartość poniższej linii

org.slf4j.simpleLogger.defaultLogLevel=info 

do

org.slf4j.simpleLogger.defaultLogLevel=error

0

Zauważyłem, że podczas korzystania z wersji 2.20.1 wtyczki maven sunfire wszystkie ostrzeżenia są zapisywane do pliku zrzutu. na przykład/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

Przejdź do simplelogger.propertiesin ${MAVEN_HOME}/conf/logging/i ustaw następujące właściwości:

org.slf4j.simpleLogger.defaultLogLevel=warn
org.slf4j.simpleLogger.log.Sisu=warn
org.slf4j.simpleLogger.warnLevelString=warn

I uważaj: warnniewarning

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.