Java

slf4jとlogbackを利用したログファイル出力方法

はじめに

ログファイルの出力方法は標準APIのLoggerを使用しを使用したり、log4jというライブラリを使用したりと様々ありますが、最近はslf4jとlogbackというライブラリを組み合わせて使用することが多いので、これらを用いたログ出力方法を解説します。

本記事の内容

■ slf4jとlogbackを利用したログファイル出力方法

環境

今回のサンプルプログラムで使用する環境

IDE:eclipse

Javaバージョン:8

logback:1.2.3

slf4j:1.7.25

フォルダ構成

今回のサンプルプログラムのフォルダ構成は以下の通りです。

ディレクトリ構成

ライブラリの取得

まず、SLF4jとlogbackというライブラリを取得します。
以下のサイトへアクセスし、赤枠のzipファイルをダウンロードしてください。

Logback公式サイト

logbackライブラリ

ダウンロードしたら、解凍します。

解凍すると以下のようなフォルダ構成となっております。
今回使用するのは赤枠のjarファイルとなります。

logback解凍後

上記赤枠のjarファイルをlibフォルダへコピーしてください。

コピーしましたら、次はコピーしたjarファイルへビルドパスを通します。
プロジェクトを右クリック>プロパティ>ビルドパスを選択してください。

すると、以下のようなWindowがでますので、「JARの追加」ボタンを押してください。

jar追加

次に、以下のようなWindowに切り替わるので、先ほどコピーしたjarファイルを選択し、「OK」ボタンを押してください。

jar選択

すると、さきほどのビルドパス設定画面に選択したjarファイルが表示されているので、適用して閉じます。

jar適用

これで事前準備は完了です。

設定ファイルの作成

slf4jとlogbackというライブラリを組み合わせてログ出力するには、「logback.xml」というファイルを作成し、どこにどんな内容のファイルを出力するか定義してやる必要があります。

1. 変数宣言

logback.xmlはまずconfigurationタグで囲ってやる必要があります。
logback.xmlで変数宣言する場合は、propertyタグを使用し、以下のように記述します。

今回は、まずログの出力先(logDir)とログファイル名(fileName)を宣言します。
ログの出力先とログファイル名は任意の場所・名前でOKです。

2. ログメッセージのフォーマット

次に、どのようなフォーマットでログ出力するのか宣言します。
そのためには、変換指定子というものを使用します。

変換指定子の使い方は以下の通りです。

オプションには、変換識別子ごとに固有の設定値を渡します。

例えば、日付を出力するdateには%date{yyyyMMdd} のようにフォーマットを渡すことができます。

オプションなので、必要でなければ省略できます。

以下に、よく使いそうな変換指定子の使い方をまとめます。

変換指定子 使用例 実行結果例 説明
c %c sample.test ロガーの名前を出力
d %d{yyyy-MM-dd} 2018-10-18 日時を出力
m %m Hello world! ロガーに渡したメッセージを表示
n sample%n test sample<改行> test 改行
p %p INFO ログレベルを出力
t %t main ログ出力時のスレッド名を出力
[%数値] [%5p] [ INFO] カッコ内の最小幅を意味し、最小幅に満たない場合は、右寄せして半角スペースでパディング。なお、最小幅をマイナスにすると、左寄せになる。

これらを利用して、今回は以下のようなフォーマットでログ出力されるよう変換指定子を使用して記述していきます。

3. ログ出力定義

ログをどこのファイルへ出力するかというのをタグと先ほど定義した変数(logDir/fileName)を使用して定義します。タグ以外の部分は毎回変わらないので、おまじないと思っていただいて結構です。

4. ログ自動削除

logbackには特定の数ログが溜まったら過去のログから削除するという指定がタグを使用してできます。

今回30個ログが溜まったら過去のログから削除するという指定にしてあげましょう。

5. フォーマットの定義

次にどういうフォーマットでログ出力するのかというのを先ほど定義した変数(format1)を使用して定義します。ここも「format1」のところ以外毎回変わらないので、細かい記載方法はおまじないと思っていただいて結構です。

6. 出力するログレベルの指定

ログレベルは以下の5段階あるのですが、No1〜2はログ出力しないというような指定もできます。

No レベル
1 TRACE
2 DEBUG
3 INFO
4 WARN
5 ERROR

実装方法はrootタグで、出力ログレベルを指定します。

下記の例ではINFOレベルを指定しているので、INFO, WARN, ERRORレベルのログが出力され、DEBUGレベル以下のログは出力されません。

7. logback.xmlサンプル

最終系はこんな感じになります。

ログ出力クラスの作成

次にログ出力サンプルクラスを作成します。
構文は以下の通りです。

構文にしたがって、今回は以下のようなログ出力サンプルクラスを作成します。
runLog()メソッドを作成し、それぞれのログレベルのメッセージを出力するような作りとなっています。

メインクラスの作成

最後にログ出力クラスを実行するためのメインクラスを実装していきます。
実装は以下の通りです。

以上で必要なプログラムの作成は完了です。

動作確認

Main.javaを右クリックし、実行>Javaアプリケーションの実行より実行してください。

指定した場所にログファイルができ、以下のように出力されていればOKです。

なお、ログファイルが存在しない場合は新規に作成され、ログファイルが存在する場合は追記されます。

Javaエンジニアとしてよりスキルアップ

ここからはJavaエンジニアとしてよりスキルアップしたい方向けのおすすめ記事紹介となります。

JavaフレームワークのデファクトスタンダードであるSpringフレームワーク習得したいけど、何から手をつけたらよいかわからないという方。

以下の記事をお読みください。

【2021年最新版】Springフレームワークおすすめ入門書籍やUdemy講座まとめSpringフレームワーク初学者のときに実際にやった書籍やUdemy講座の中で、もっとも分かりやすく、現場で使える実践的な内容が盛り込まれている入門書籍や講座をまとめました。何から手をつけたらよいかわからないという方や業務についていけないという方はぜひ参考にしてください。...

また、無料で基礎からJavaを学びなおしたいという方は以下の記事を参考にしていただければと思います。

【2020年最新版】Java初心者におすすめの無料スクールランキングTOP3スクールに通いたいけどお金がないという方にむけ、客観的審査基準によるJava無料スクールおすすめランキングを公開しております。Javaエンジニアとして現場で戦力となるために必要な実践的な技術が学べるスクールを厳選してお伝えします。...

さいごまで読んでいただき、ありがとうございました。

フリーランスエンジニア転職完全ロードマップ

知り合いから
「フリーランスエンジニアになれば、年収800万円以上の高報酬でかつ、自由な働き方をチョイスできる」
というのを聞いて、フリーランスエンジニアに興味を持ったのですが、
当時SIer企業でエンジニアをやっていたボクはなかなか一歩踏みだせませんでした。

というもの以下のような不安があったからです。

■フリーランスエンジニアってかなりの技術力がないとなれないのではないのか?

■フリーランスエンジニアって不安定なのではないのか?

■フリーランスエンジニアって人脈やコネ、営業力が必要なのではないのか?

しかし、実際にフリーランスエンジニアになってみて気づきました。

これらはすべて間違いです。

過去のボクのようにフリーランスエンジニアに興味あるけど一歩踏み出せないという方向けに
『フリーランスエンジニア転職完全ロードマップ』
という記事を書きました。

この記事読めば、どうすればフリーランスになれるのかが分かりますので、ぜひ一読ください。