今更Loggingメモ
ふと思い立って,java.util.loggingを使ってみることにした.
という訳で,初心者による初心者のためのメモ書き.
検証を怠っている部分があるので,誤解に基づく間違いが含まれる可能性が大いにあり得る.あまり信用しないように.
一番基本的な使い方
public static void main(String args[]) { Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); logger.config("Config."); logger.info("Info."); logger.warning("Warning."); logger.severe("Severe."); }
デフォルトの設定にもよるけど,Config が表示されなかったりするはず.
設定ファイルを使う
グローバルなLoggerを使う場合
handlers=java.util.logging.ConsoleHandler .level=ALL java.util.logging.ConsoleHandler.level=ALL
のような形のファイルを保存.名前は何でも良いが,ここでは
logging.properties
としておこうか.
(グローバルな設定ファイルと名前がかぶるので,そういうのが嫌いな人は変えるべき)
その上で,
public static void main(String args[]) { try { InputStream in = new FileInputStream("logging.properties"); LogManager.getLogManager().readConfiguration(in); in.close(); } catch (IOException e) { e.printStackTrace(); } Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); logger.config("Config."); logger.info("Info."); logger.warning("Warning."); logger.severe("Severe."); }
今度は全部表示されるはず.
名前付きのLoggerを使う場合
設定ファイルに
mypackage.level=WARNING
と追記して,
... Logger logger = Logger.getLogger("mypackage"); ...
と変更すると,Warning と Severe だけが表示される.
Loggerの親子関係
mypackage という名前の Logger は,mypackage.subpackage という名前の Logger の親のようなものである.
子は親の設定には逆らえない.
例えば,
mypackage.level=WARNING mypackage.subpackage.level=ALL
... Logger logger = Logger.getLogger("mypackage.subpackage"); ...
としても,Warning 以上しか表示されない.
逆に,親の許可する設定を更に絞ることはできて,
mypackage.level=WARNING mypackage.subpackage.level=SEVERE
とすると,Severe しか表示されなくなる.
名無しの Logger (グローバル?) は最も上位の親であり,
.level=SEVERE
と設定すると,全てのLoggerにおいて Severe しか表示できなくなる.