技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

java.util.loggingパッケージ

Java1.4からあったらしいが、仕事ではlog4jばかりなので使う機会がなかった。

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class LoggingTest {

	public static void main(String[] args) {
		FileHandler handler = null;
		try {
			handler = new FileHandler("log/test.log", true);
		} catch (SecurityException | IOException e) {
			e.printStackTrace();
		}
		handler.setFormatter(new SimpleFormatter());
		Logger logger = Logger.getAnonymousLogger();
		logger.setLevel(Level.ALL);
		logger.addHandler(handler);
		logger.severe("SEVEREです");
		logger.warning("WARNINGです");
		logger.info("INFOです");
		logger.config("CONFIGです");
		logger.fine("FINEです");
		logger.finer("FINERです");
		logger.finest("FINESTです");
		if (handler != null) {
			handler.close();
		}
	}
}

HandlerがLog4JのAppenderのような位置づけになっていて、
このように書くとRollingFileAppenderのようになる。

// 1000行ごとに3世代ファイルを切り替える指定
new FileHandler("log/test%g.log", 1000, 3, true);

SimpleFormatterを使うと、こんな感じに2行でログ出力される。

3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
重大: SEVEREです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
警告: WARNINGです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
情報: INFOです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
構成: CONFIGです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
普通: FINEです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
詳細: FINERです
3 19, 2012 10:12:51 午後 sandbox.java.util.logging.LoggingTest main
最も詳細: FINESTです

ちょっと違和感があるが、色々余計な情報を出しすぎて肝心のログ内容が右スクロールしないと見れなかったりするので、これはこれでありなのかも。ただLEVELは日本語でだすと何か間抜けな感じ。