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.