Visual Studio Code(VS Code) + Maven + SLF4J(Logback)によるロギング環境の構築
本記事は、Microsoftにより開発されたソースコードエディタである「Visual Studio Code(VS Code)」を用いて、Mavenプロジェクトからロギング環境構築を行うためのメモになります。
環境の準備
事前準備として以下のインストール作業を済ませておきます。
Mavenプロジェクトの作成
上記の事前準備が完了したら、VS Codeを起動します。
起動後にCtrl + Shift + p
を入力すると、コマンドパレットという検索ウインドウが表示され、そこにmaven
と入力すると検索候補が出てきますので、以下のMaven: Create Maven Project
を選択します。
次にSelect an archetype ...
と表示されるので、ここでもmaven
と入力すると、検索候補が出てきますので、以下のmaven-archetype-quickstart
を選択します。
最後にSelect a version ...
と表示されるので、ここでは以下の1.4
を選択します。
上記の画面まで進むと、フォルダ選択ウインドウが開きますので、今回のプロジェクトを保存する任意のフォルダを指定し、Select Destination Folder
をクリックします。
すると、VS Codeのビュー上のターミナルでmvn
コマンドが実行され、pom.xml
と呼ばれるMavenの設定用ファイルの作成準備が始まります。
Junit> cmd /c mvn archetype:generate -DarchetypeArtifactId="maven-archetype-quickstart" -DarchetypeGroupId="org.apache.maven.archetypes" -DarchetypeVersion="1.4" [INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] >>> maven-archetype-plugin:3.1.2:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.1.2:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] [INFO] --- maven-archetype-plugin:3.1.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.4] found in catalog remote
その後、インタラクティブモードに切り替わり、以下の情報の入力待ち状態になります。
Define value for property 'groupId': Define value for property 'artifactId': Define value for property 'version' 1.0-SNAPSHOT: Define value for property 'package' test:
groupIdは、プロジェクトの識別子となり、主にプロジェクトのルートパッケージ名を使うのが一般的とされています。
今回はtest
としました。
artifactIdは、出力する成果物の名称に使われるID(jarファイルやwarファイルのバージョン抜きのファイル名)となります。
今回はtest
としました。
versionは、ビルド対象のアプリケーション(プロジェクト)のバージョンになります。
何も入力なしにEnter
を押下すると、デフォルトで1.0-SNAPSHOT
となります。
packageは、パッケージ名となり、何も入力なしにEnter
を押下すると、上記で入力したtest
となります。
ここまで入力が完了したら、以下の確認画面が表示されます。
Confirm properties configuration: groupId: test artifactId: test version: 1.0-SNAPSHOT package: test Y:
問題が無ければそのままEnter
を押下し、プロジェクトを作成します。
成功すれば[INFO] BUILD SUCCESS
の文字が出力され、プロジェクトの作成が完了し、以下のようなフォルダ構成になります。
※ビュー上のPROBLEMSとして、コンパイラのバージョンの違いに関しての警告が出る場合は、pom.xml
の<properties>
タグ内を以下のように修正します(使用しているJDKのバージョンに合わせます)。
// pom.xml ... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> </properties> ...
依存するライブラリの追加
今回はLog4jの後継のロギングライブラリであるSLF4JとLogbackというものを組み合わせてログ環境を構築していきます。
pom.xmlに以下を追記します。
// pom.xml ... <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> </dependencies> ...
設定ファイルの作成
ログの出力に関するフォーマットや管理方法については、logback.xmlという設定ファイルに記述をしていきます。
デフォルトでは、src/main直下にresourcesというディレクトリを作成し、同ディレクトリ直下に保存します。
// logback.xml <?xml version="1.0" encoding="UTF-8" ?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date [%thread] %-5level %logger{35} - %message%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
テストコードの作成
次にテストコードを作成します。
今回はログレベルINFOにて、アプリケーションの起動及び終了をターミナル上(標準出力)に出力するものを作成します。
//LogbackTest.java package test; import org.slf4j.LoggerFactory; import org.slf4j.Logger; public class LogbackTest { private static final Logger logger = LoggerFactory.getLogger(LogbackTest.class); public static void main( String[] args ) { logger.info("アプリケーションを実行しました。"); logger.info("アプリケーションを終了しました。"); } }
プログラムの実行
上記のテストコードが実装出来たら、いよいよテストを実行します。
実行するとターミナル上で以下のログが出力されます。
2021-01-24 19:19:42,711 [main] INFO test.LogbackTest - アプリケーションを実行しました。 2021-01-24 19:19:42,714 [main] INFO test.LogbackTest - アプリケーションを終了しました。
ログファイルに出力する
上記ではターミナル上に出力しただけですが、ログ自体は基本的にファイルにし出力し、設定した日数でローテートをしながら管理をしていきます。
上記で作成したlogback.xmlにファイルに出力するためのappenderを追記していきます。
// logback.xml <?xml version="1.0" encoding="UTF-8" ?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date [%thread] %-5level %logger{35} - %message%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/logtest.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/logtest.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%date [%thread] %-5level %logger{35} - %message%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
上記にて修正した後にプログラムを再度実行すると、ターミナル上にログが出力され、同じ内容のものがlogs/logtest.logにも書き込まれます。
2021-01-24 19:27:31,491 [main] INFO test.LogbackTest - アプリケーションを実行しました。 2021-01-24 19:27:31,494 [main] INFO test.LogbackTest - アプリケーションを終了しました。 $ cat logs/logtest.log 2021-01-24 19:27:31,491 [main] INFO test.LogbackTest - アプリケーションを実行しました。 2021-01-24 19:27:31,494 [main] INFO test.LogbackTest - アプリケーションを終了しました。