Bagaimana mengubah level maven logging untuk hanya menampilkan peringatan dan kesalahan?


142

Saya ingin mencegah pakar menampilkan pesan INFO, saya hanya ingin melihat PERINGATAN dan KESALAHAN (jika ada).

Bagaimana saya bisa mencapai ini, lebih disukai dengan mengubah baris perintah yang memanggil pakar?


Topik yang relevan: stackoverflow.com/questions/71069/… . -B, --batch-modeatau -qakan membuat mvnlebih sedikit verbose.
Stanislav

Jawaban:


108

Menjawab pertanyaan Anda

Saya melakukan penyelidikan kecil karena saya juga tertarik dengan solusinya.

Opsi verbositas baris perintah Maven

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

  • -e untuk kesalahan
  • -X untuk debug
  • -q hanya untuk kesalahan

File konfigurasi logging maven

Saat ini pakar 3.1.x menggunakan SLF4J untuk masuk ke System.out. Anda dapat mengubah pengaturan pencatatan pada file:

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

Menurut halaman: http://maven.apache.org/maven-logging.html

Pengaturan baris perintah

Saya pikir Anda harus dapat mengatur level Log default dari logger sederhana melalui parameter baris perintah, seperti ini:

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

Tetapi saya tidak bisa membuatnya bekerja . Saya kira satu-satunya masalah dengan ini adalah, maven mengambil level default dari file konfigurasi di classpath. Saya juga mencoba beberapa pengaturan lain melalui System.properties, tetapi semuanya tidak berhasil.

Lampiran

Anda dapat menemukan sumber slf4j di github di sini: slf4j github

Sumber simplelogger di sini: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Loader plexus memuat simplelogger.properties.


2
apakah Anda mendapatkan simplelogger.propertiesperubahan berfungsi? Ketika saya mengubah pembaruan org.slf4j.simpleLogger.warnLevelStringpengaturan dengan mvn compiletepat, tetapi tampaknya mengabaikan org.slf4j.simpleLogger.defaultLogLevelpengaturan. Itu juga masuk pada tingkat info, bahkan ketika saya mengatur itu untuk memperingatkan atau kesalahan.
Alden

1
@Alden, saya mendapatkan perilaku yang sama. itu hanya diabaikan.
Jax

18
Bagi saya ternyata menambahkan "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" ke perintah build tidak memiliki efek apa pun. Jika saya mendefinisikan ini sebelum membangun di MAVEN_OPTS seperti ini: ekspor "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogger.defaultLogLevel = debug", maka ia berfungsi dengan sempurna tanpa mengubah $ {MAVEN_HOME} /conf/logging/simpleloggerpropger. .
Gábor Lipták

1
Alden, Gábor Lipták: dan bagi saya tidak satu pun dari kedua metode ini yang berfungsi. :( Saya menggunakan Maven 3.2.5.
Greg Dubicki

1
jika windows, dalam file bat, gunakan set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

45

Linux:

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

atau

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

Windows:

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

5
tetapi jika intinya adalah untuk mengurangi IO yang berlebihan selama mvn ... maka itu tidak benar-benar bermanfaat
HoaPhan

Bagaimana kita dapat mencapai hal yang sama pada mesin Windows karena egrep tidak berfungsi di dalamnya?
hemanto

sesuatu sepertimvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H

Sepertinya findstrmendukung regex dan opsi lain yang mungkin membuatnya lebih ringkas - ss64.com/nt/findstr.html
Tom H

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

32

Anda dapat mencapainya dengan MAVEN_OPTS, misalnya
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Daripada menempatkan properti sistem langsung di baris perintah. (Setidaknya untuk pakar 3.3.1.)

Pertimbangkan ~/.mavenrcuntuk menggunakan pengaturan MAVEN_OPTSjika Anda ingin login diubah untuk login Anda di semua doa pakar.


2
Ini tampaknya berfungsi karena saya dapat menonaktifkan pesan peringatan dan info dengan mengatur level ke kesalahan, tetapi sayangnya ini juga mematikan output reguler. Saya benar-benar mencoba untuk menonaktifkan beberapa peringatan saat menjalankan help:evaluatetarget untuk mencetak nilai project.versiondan output ini (meskipun sepertinya tidak datang slf4j) juga dimatikan.
haridsv

Satu-satunya jawaban yang berfungsi tanpa mengacaukan instalasi Maven secara permanen. Alasan lain Maven adalah dinosaurus di antara sistem pembangunan - itu hanya tidak memiliki dukungan untuk persyaratan akal sehat.
Abhijit Sarkar

16

Jika Anda menggunakan Logback, cukup masukkan logback-test.xmlfile ini ke src/test/resourcesdirektori:

<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

Anda dapat mencapai ini dengan menggunakan di bawah ini di commandline itu sendiri

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

misalnya:

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

Sayangnya, bahkan dengan maven 3 satu-satunya cara untuk melakukannya adalah dengan menambal kode sumber.

Ini adalah instruksi singkat bagaimana melakukannya.

Klon atau garpu repo Maven 3: "git clone https://github.com/apache/maven-3.git "

Edit org.apache.maven.cli.MavenCli # logging, dan ubah

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

untuk

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

Dalam versi snapshot saat ini ada di baris 270

Kemudian jalankan "mvn install", distro maven baru Anda akan berada di folder "apache-maven \ target \"

Lihat perbedaan ini untuk referensi: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
Jawaban ini adalah OBSOLETE sampai sekarang - a) URL repo telah berubah, b) tidak ada pernyataan tingkat INFO dalam kode ini, c) diff URL tidak berfungsi.
Greg Dubicki

Tidak masalah di mana kode menggunakan INFO - saat mengembangkan plugin, mojo Anda harus bergantung pada pakar logger dengan getLog()- jika Anda dapat hidup dengan konfigurabilitas.
Adam

1

Cara paling sederhana adalah memutakhirkan ke Maven 3.3.1 atau lebih tinggi untuk memanfaatkan ${maven.projectBasedir}/.mvn/jvm.configdukungan.

Kemudian Anda dapat menggunakan opsi apa pun dari dukungan SimpleLogger SL4FJ dari Maven untuk mengonfigurasi semua penebang atau penebang tertentu. Sebagai contoh, berikut adalah cara membuat semua peringatan di warnlevel, kecuali untuk PMD yang dikonfigurasi untuk masuk error:

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

Lihat di sini untuk detail lebih lanjut tentang logging dengan Maven.


1

Mengubah infoke errordalam simplelogging.propertiesfile akan membantu dalam mencapai kebutuhan Anda.

Ubah saja nilai dari baris di bawah ini

org.slf4j.simpleLogger.defaultLogLevel=info 

untuk

org.slf4j.simpleLogger.defaultLogLevel=error

0

Saya perhatikan ketika menggunakan versi 2.20.1 dari plugin maven sunfire , semua peringatan dituliskan ke file dumpstream. misalnya/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

Pergi ke simplelogger.propertiesdalam ${MAVEN_HOME}/conf/logging/dan mengatur properti berikut:

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

Dan waspadalah:, warntidakwarning

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.