読者です 読者をやめる 読者になる 読者になる

(O+P)ut

習うより慣れろ、Practice makes perfect。この言葉をモットーに、Slerで働く若手インフラエンジニアが、学んだ知識を【 (O+P)ut = OutPut 】していく場です。

【Java】log4J入門 ~System.out.println()とはサヨナラ!~

テクノロジー Java

Javaでコードを書く時には,いつもeclipseを使ってまして,コンソールで結果を確認する時にはSystem.out.printなどを使ってたんですが,Log4Jを使ってみたくなったので,今日からはこっちを使っていくことにします.
Log4Jのメリットを箇条書きでまとめてみると

  • ログ生成の制御が簡単
  • 動作のパフォーマンスも良い
  • ちょっとかっこいい*1

って感じみたいですね.
ただデメリットじゃないですけど,最初は設定やらなんやらを理解するのが大変でちょっとハードルは高い気がする.だから,まずはめちゃくちゃ簡単な使い方をしてLog4Jに慣れていくのが大事ではないのか!?とか思ったので超入門を書いてみます.自分のこれからのLog4J人生にとっても良さそう.*2

まずはLog4Jにはログを出力するか否かのレベルがあります.ざっと並べると,

    • FATAL
    • ERROR
    • WARN
    • INFO
    • DEBUG
    • TRACE

とあって上から順に出力する優先度(?)が高いらしい.だから,動作テストとかをする時はいっぱいログを出力するけど,有る程度までバグは減ってくると画面がごちゃごちゃするし大事なとこだけ出すか〜とかが簡単にできる.

Eclipseでの実行の仕方について.

まずテキトーにLog4Jを試したいファイルをプロジェクトの中に作って,

import org.apache.log4j.*;

とインポートを試みると,おそらくエラーが出るはず.
log4jをインストールしてないからですね.僕は
The Jakarta Site - Jakarta Downloads
のarchivesの中にlog4jというフォルダがあるのでjakarta-log4j-1.2.8.tar.gzをインストールしました.バージョンはその都度で違ってるかもしれないですけど,とりあえずこの手のファイルをインストール,解凍すると.そのフォルダの中の下図の位置にlog4jっぽいjarファイルがあるはず.
f:id:mtiit:20150208115713p:plain
Eclipseに戻る.
EclipseLog4Jを試したいファイルが存在するプロジェクトを左クリックでプロパティに行きます.ここで Java Build Path を選択してライブラリーを選ぶと,Add External JAR...とかいうボタンがあります.要は,外部のjarファイルにパスを通してくれるっていうことをしてくれます.そこでさっきのjarファイルを選択してOKしてみてください.おそらく

import org.apache.log4j.*;

のエラーは消えているはず.
ここまで来れば実際に使える('ω')/~

import org.apache.log4j.*;

public class Test {

	public static void main(String args[]){

		Logger logger = Logger.getLogger("Sample");
		BasicConfigurator.configure();
		logger.setLevel(Level.DEBUG);

		logger.debug("debug (^o^)/");
		logger.info("info (;w;)/");

	}
}

細かいことは置いといて,コンソールへの出力は

0 [main] DEBUG Sample  - debug (^o^)/
1 [main] INFO Sample  - info (;w;)/

になります.ポイントは,logger.setLevelのLevel.DEBUGをLevel.INFOにすると,(^o^)/は出てこないことです.System.out.println()からの乗り換え第一歩としては,今までこれで書いてたとこを全部INFOで出力する.次の段階では,出力するほどでもないけど細かいところを見たい時には出力して欲しいところをDEBUGにして書いておく.そっから先は,例えば出力先をコンソールじゃなくてファイルにしてみたり,などどんどん便利になっていくはず.僕もこれからもっと勉強していって,記事としてアウトプットすることで頭の整理になればな〜とか思ってます:-)

*1:個人的な見解

*2:昨日まではSystem.out.println()を使いまくってました