Mavenロギングレベルを変更して警告とエラーのみを表示するにはどうすればよいですか?


142

MavenがINFOメッセージを表示しないようにしたいのですが、警告とエラー(ある場合)だけを表示したいと思います。

どうすれば、できればmavenを呼び出すコマンドラインを変更して、これを実現できますか?


関連トピック:stackoverflow.com/questions/71069/…-B, --batch-modeまたは-qようになりますmvnそれほど冗長。
スタニスラフ

回答:


108

あなたの質問に答える

解決策にも興味があるので、簡単な調査を行いました。

Mavenコマンドラインの詳細オプション

http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-optionによると

  • エラーの場合は-e
  • デバッグ用の-X
  • エラーのみの-q

Mavenロギング構成ファイル

現在、maven 3.1.xはSLF4Jを使用してSystem.outにログインします。次のファイルでログ設定を変更できます。

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

ページによると:http : //maven.apache.org/maven-logging.html

コマンドライン設定

次のように、コマンドラインパラメータを使用して、シンプルなロガーのデフォルトのログレベルを設定できるはずです。

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

しかし、私はそれを機能させることができませんでした。これに関する唯一の問題は、mavenがクラスパスの構成ファイルからデフォルトレベルを取得することです。System.propertiesを介して他の設定もいくつか試しましたが、すべて失敗しました。

付録

githubのslf4jのソースはここにあります:slf4j github

ここでsimpleloggerのソース:slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

神経叢ローダーがをロードしsimplelogger.propertiesます。


2
あなたは手に入れたsimplelogger.properties変更作業を?org.slf4j.simpleLogger.warnLevelString設定を変更すると、mvn compile更新が適切に更新されますが、org.slf4j.simpleLogger.defaultLogLevel設定が無視されているようです。また、警告またはエラーに設定した場合でも、情報レベルでログに記録します。
オールデン、2014年

1
@オールデン、私は同じ振る舞いをしています。単に無視されます。
jax 2014

18
私にとって、ビルドコマンドに「-Dorg.slf4j.simpleLogger.defaultLogLevel = info」を追加しても効果がないことがわかりました。ビルドの前にこれを次のようにMAVEN_OPTSで定義すると、export "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug"となり、$ {MAVEN_HOME} /conf/logging/simplelogger.propertiesファイルを変更せずに完全に機能します。
ガーボルLipták

1
オルボル、ガボール・リプタク:そして私にとって、2つの方法はどれも機能しません。:(私はMavenの3.2.5を使用しています。
グレッグDubicki

1
Windowsの場合、batファイルで、set MAVEN_OPTS =%MAVEN_OPTS%-Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

45

Linux:

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

または

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

ウィンドウズ:

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

5
しかし、ポイントがmvn中の冗長IOを削減することである場合...それは実際には効果がありません
HoaPhan

egrepが動作しないのと同じように、Windowsマシンでも同じことを実現できますか?
hemanto 2017

のようなものmvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
トムH

findstr正規表現およびより簡潔になる可能性のあるその他のオプションをサポートしているようです-ss64.com/nt/findstr.html
Tom H

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

32

たとえば、MAVEN_OPTSを使用してこれを実現できます。
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

システムプロパティをコマンドラインに直接入力するのではなく、(少なくともMaven 3.3.1の場合。)

すべてのMaven呼び出しでログインのロギングを変更~/.mavenrcするMAVEN_OPTS場合は、設定に使用することを検討してください。


2
レベルをエラーに設定することで警告と情報メッセージを無効にできるため、これは機能しているようですが、残念ながら通常の出力もオフになっています。実際にhelp:evaluate値をproject.version出力するためにターゲットを実行している間、いくつかの警告を無効にしようとしていましたが、この出力(通過していないようですがslf4j)もオフになりました。
haridsv

Mavenインストールを永続的にいじることなく機能する唯一の答え。Mavenがビルドシステムの中で恐竜であるもう1つの理由-常識的な要件をサポートしていないだけです。
Abhijit Sarkar 2017年

16

Logbackを使用している場合は、このlogback-test.xmlファイルをsrc/test/resourcesディレクトリに配置します。

<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

コマンドライン自体で以下を使用してこれを達成できます

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

例:

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

残念ながら、maven 3を使用する場合でも、ソースコードにパッチを適用することが唯一の方法です。

これは、その方法の簡単な説明です。

Maven 3リポジトリのクローンまたはフォーク: "git clone https://github.com/apache/maven-3.git "

org.apache.maven.cli.MavenCli#loggingを編集して、

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

現在のスナップショットバージョンでは270行目です

次に、「mvn install」を実行すると、新しいmavenディストリビューションが「apache-maven \ target \」フォルダーに配置されます

参照については、この差分を参照してください:https : //github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
この回答は現在廃止されています-a)リポジトリURLが変更されている、b)このコードにINFOレベルのステートメントがない、c)差分URLが機能しない。
Greg Dubicki

コードがどこでINFOを使用するかは関係ありません-プラグインを開発するとき、あなたのmojoはMavenロガーに依存getLog()する必要があります-構成可能性を備えている場合。
アダム

1

最も簡単な方法は、サポートを利用するためにMaven 3.3.1以降にアップグレードすることです${maven.projectBasedir}/.mvn/jvm.config

次に、MavenのSL4FJのSimpleLoggerサポートのオプションを使用して、すべてのロガーまたは特定のロガーを構成できます。たとえば、次のwarnように、ログに記録するように構成されているPMDを除いて、レベルですべての警告を作成する方法を示しますerror

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

参照してくださいここで Mavenを持つログの詳細については。


1

ファイルinfoerrorに変更すると、simplelogging.properties要件の達成に役立ちます。

以下の行の値を変更するだけです

org.slf4j.simpleLogger.defaultLogLevel=info 

org.slf4j.simpleLogger.defaultLogLevel=error

0

maven sunfireプラグインの 2.20.1バージョンを使用すると、すべての警告がダンプストリームファイルに書き込まれることに気付きました。例えば/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

に移動しsimplelogger.properties${MAVEN_HOME}/conf/logging/、次のプロパティを設定します。

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

そして注意してください:warnではなくwarning

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.