1. 概要

このクイックチュートリアルでは、Mavenでログオプションを構成する方法を説明します。

2. コマンドライン

デフォルトでは、Mavenは情報、警告、およびエラーログのみをログに記録します。 また、エラーの場合、そのログの完全なスタックトレースは表示されません。 完全なスタックトレースを表示するには、-eまたは–errorsオプションを使用できます

$ mvn -e clean compile
// truncated
cannot find symbol
  symbol:   variable name
  location: class Compiled

    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    ...

上に示したように、Mavenは完全なエラーレポートを表示します。 -Xまたは–debugオプションを使用してデバッグレベルのログを表示することもできます

$ mvn -X clean compile
// truncated
OS name: "mac os x", version: "10.15.5", arch: "x86_64", family: "mac"
[DEBUG] Created new class realm maven.api
[DEBUG] Importing foreign packages into class realm maven.api
...

デバッグがオンの場合、出力は非常に冗長になります。 これに対抗するために、 -qまたは–quiet オプションを使用して、予期されるエラーをログに記録しないようにMavenに要求できます。

$ mvn --quiet clean compile

さらに、 -lまたは–log-file オプションを使用して、Mavenログをファイルにリダイレクトできます。

$ mvn --log-file ./mvn.log clean compile

標準出力の代わりに、すべてのログは現在のディレクトリのmvn.logファイルにあります。 別の方法として、OS機能を使用してMaven出力をファイルにリダイレクトすることもできます。

$ mvn clean compile > ./mvn.log

3. SLF4J設定

現在、MavenはSLF4JSimple実装と組み合わせてロギングにSLF4JAPIを使用しています。 したがって、SLF4J Simpleでロギングを構成するには、 ${maven.home}/conf/logging/simplelogger.propertiesファイルのプロパティーを編集できます。

たとえば、このファイルに次の行を追加すると、次のようになります。

org.slf4j.simpleLogger.showDateTime=true
org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss

次に、Mavenは上記の形式で日時情報を表示します。

別のビルドを試してみましょう:

$ mvn clean compile
2020-07-08 12:08:07 [INFO] Scanning for projects...

これらのプロパティは、コマンドラインから-D引数を介して渡すこともできます。

$ mvn compile -Dorg.slf4j.simpleLogger.showThreadName=true
[main] [INFO] Scanning for projects...

ここでは、他の情報に加えてスレッド名を表示しています。

上記のプロパティに加えて、他のプロパティを使用して単純なロガーを構成することもできます。

  • org.slf4j.simpleLogger.logFile は、標準出力の代わりにログファイルをログに使用します
  • org.slf4j.simpleLogger.defaultLogLevelはデフォルトのログレベルを表します。 trace debug info warn error、、またはoffのいずれかになります。 –デフォルト値はinfo
  • org.slf4j.simpleLogger.showLogName は、 true の場合、SLF4jロガー名を表示します
  • org.slf4j.simpleLogger.showShortLogName true の場合、長いロガー名を切り捨てます

4. 結論

この短いチュートリアルでは、Mavenでさまざまなロギングおよび詳細オプションを構成する方法を説明しました。