Java : Level (ログ) - API使用例
Level (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
Levelクラスは、ログ出力の制御に使います。
例えば、
- 開発中は詳細なログまで出力したい
- リリース版では必要最低限のログのみを出力したい
という制御が可能となります。
Levelには、以下のレベルが定義されています。
- SEVERE (最高値)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST (最低値)
Logger や Handler に対して Level を設定することにより、そのレベル以上のログのみが出力されるようになります。
// 詳細なログまで出力させる例です。
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.FINE);
final var handler = new ConsoleHandler();
handler.setLevel(Level.FINE);
logger.addHandler(handler);
logger.severe("重大なエラー!");
logger.warning("警告!");
logger.fine("デバッグ情報");
// 結果
// ↓
//3月 09, 2022 3:43:30 午後 com.example.logging.LevelTest$2 method
//重大: 重大なエラー!
//3月 09, 2022 3:43:30 午後 com.example.logging.LevelTest$2 method
//警告: 警告!
//3月 09, 2022 3:43:30 午後 com.example.logging.LevelTest$2 method
//普通: デバッグ情報
// 重大なエラーのみ出力させる例です
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.SEVERE);
final var handler = new ConsoleHandler();
handler.setLevel(Level.SEVERE);
logger.addHandler(handler);
logger.severe("重大なエラー!");
logger.warning("警告!");
logger.fine("デバッグ情報");
// 結果
// ↓
//3月 09, 2022 4:39:56 午後 com.example.logging.LevelTest$3 method
//重大: 重大なエラー!
どのようなときにどのレベルを使うべきか?の指針については別途記事にいたしました。
こちらもご参照いただけたら幸いです。
フィールド
static final Level ALL
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.ALL);
final var handler = new ConsoleHandler();
handler.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!");
// 結果
// ↓
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//重大: SEVERE!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//警告: WARNING!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//情報: INFO!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//構成: CONFIG!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//普通: FINE!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//詳細: FINER!
//3月 09, 2022 4:45:38 午後 com.example.logging.LevelTest$4 method
//最も詳細: FINEST!
static final Level CONFIG
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.CONFIG);
final var handler = new ConsoleHandler();
handler.setLevel(Level.CONFIG);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:46:30 午後 com.example.logging.LevelTest$5 method
//重大: SEVERE!
//3月 09, 2022 4:46:30 午後 com.example.logging.LevelTest$5 method
//警告: WARNING!
//3月 09, 2022 4:46:30 午後 com.example.logging.LevelTest$5 method
//情報: INFO!
//3月 09, 2022 4:46:30 午後 com.example.logging.LevelTest$5 method
//構成: CONFIG!
static final Level FINE
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.FINE);
final var handler = new ConsoleHandler();
handler.setLevel(Level.FINE);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:49:10 午後 com.example.logging.LevelTest$6 method
//重大: SEVERE!
//3月 09, 2022 4:49:10 午後 com.example.logging.LevelTest$6 method
//警告: WARNING!
//3月 09, 2022 4:49:10 午後 com.example.logging.LevelTest$6 method
//情報: INFO!
//3月 09, 2022 4:49:10 午後 com.example.logging.LevelTest$6 method
//構成: CONFIG!
//3月 09, 2022 4:49:10 午後 com.example.logging.LevelTest$6 method
//普通: FINE!
static final Level FINER
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.FINER);
final var handler = new ConsoleHandler();
handler.setLevel(Level.FINER);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//重大: SEVERE!
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//警告: WARNING!
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//情報: INFO!
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//構成: CONFIG!
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//普通: FINE!
//3月 09, 2022 4:50:27 午後 com.example.logging.LevelTest$7 method
//詳細: FINER!
static final Level FINEST
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.FINEST);
final var handler = new ConsoleHandler();
handler.setLevel(Level.FINEST);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//重大: SEVERE!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//警告: WARNING!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//情報: INFO!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//構成: CONFIG!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//普通: FINE!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//詳細: FINER!
//3月 09, 2022 4:51:55 午後 com.example.logging.LevelTest$8 method
//最も詳細: FINEST!
static final Level INFO
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.INFO);
final var handler = new ConsoleHandler();
handler.setLevel(Level.INFO);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:52:35 午後 com.example.logging.LevelTest$9 method
//重大: SEVERE!
//3月 09, 2022 4:52:35 午後 com.example.logging.LevelTest$9 method
//警告: WARNING!
//3月 09, 2022 4:52:35 午後 com.example.logging.LevelTest$9 method
//情報: INFO!
static final Level OFF
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.OFF);
final var handler = new ConsoleHandler();
handler.setLevel(Level.OFF);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//<なにも表示されません>
static final Level SEVERE
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.SEVERE);
final var handler = new ConsoleHandler();
handler.setLevel(Level.SEVERE);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:54:32 午後 com.example.logging.LevelTest$11 method
//重大: SEVERE!
static final Level WARNING
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(Level.WARNING);
final var handler = new ConsoleHandler();
handler.setLevel(Level.WARNING);
logger.addHandler(handler);
logger.severe("SEVERE!");
logger.warning("WARNING!");
logger.info("INFO!");
logger.config("CONFIG!");
logger.fine("FINE!");
logger.finer("FINER!");
logger.finest("FINEST!");
// 結果
// ↓
//3月 09, 2022 4:55:15 午後 com.example.logging.LevelTest$12 method
//重大: SEVERE!
//3月 09, 2022 4:55:15 午後 com.example.logging.LevelTest$12 method
//警告: WARNING!
コンストラクタ
Level (String name, int value)
System.out.println(Level.INFO.intValue()); // 800
System.out.println(Level.FINE.intValue()); // 500
class SampleLevel extends Level {
SampleLevel() {
super("SAMPLE", 600);
}
}
final var sampleLevel = new SampleLevel();
System.out.println(sampleLevel.getName()); // SAMPLE
System.out.println(sampleLevel.intValue()); // 600
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(sampleLevel);
final var handler = new ConsoleHandler();
handler.setLevel(sampleLevel);
logger.addHandler(handler);
logger.info("INFO!");
logger.log(sampleLevel, "テストログ!");
logger.fine("FINE!");
// 結果
// ↓
//3月 09, 2022 4:56:58 午後 com.example.logging.LevelTest$13 method
//情報: INFO!
//3月 09, 2022 4:56:58 午後 com.example.logging.LevelTest$13 method
//SAMPLE: テストログ!
Level (String name, int value, String resourceBundleName)
package com.example.logging;
import java.util.ListResourceBundle;
public class LevelResourceBundle extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return new Object[][]{
{"SAMPLE", "サンプル"}
};
}
}
System.out.println(Level.INFO.intValue()); // 800
System.out.println(Level.FINE.intValue()); // 500
class SampleLevel extends Level {
SampleLevel() {
super("SAMPLE", 600, "com.example.logging.LevelResourceBundle");
}
}
final var sampleLevel = new SampleLevel();
System.out.println(sampleLevel.getName()); // SAMPLE
System.out.println(sampleLevel.intValue()); // 600
// com.example.logging.LevelResourceBundle
System.out.println(sampleLevel.getResourceBundleName());
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.setLevel(sampleLevel);
final var handler = new ConsoleHandler();
handler.setLevel(sampleLevel);
logger.addHandler(handler);
logger.info("INFO!");
logger.log(sampleLevel, "テストログ!");
logger.fine("FINE!");
// 結果
// ↓
//3月 09, 2022 5:10:42 午後 com.example.logging.LevelTest$14 method
//情報: INFO!
//3月 09, 2022 5:10:42 午後 com.example.logging.LevelTest$14 method
//サンプル: テストログ!
メソッド
boolean equals (Object ox)
System.out.println(Level.FINE.equals(Level.FINE)); // true
System.out.println(Level.FINE.equals(Level.INFO)); // false
System.out.println(Level.WARNING.equals(Level.FINE)); // false
class SampleLevel extends Level {
public SampleLevel() {
// 意図的に、Level.FINE と同じ値 (500) にします。
super("SAMPLE", 500);
}
}
// 名前が違っていても値が同じであれば true となります。
System.out.println(Level.FINE.equals(new SampleLevel())); // true
String getLocalizedName ()
System.out.println(Locale.getDefault()); // ja_JP
System.out.println(Level.OFF.getLocalizedName()); // オフ
System.out.println(Level.ALL.getLocalizedName()); // すべて
System.out.println(Level.SEVERE.getLocalizedName()); // 重大
System.out.println(Level.WARNING.getLocalizedName()); // 警告
System.out.println(Level.INFO.getLocalizedName()); // 情報
System.out.println(Level.CONFIG.getLocalizedName()); // 構成
System.out.println(Level.FINE.getLocalizedName()); // 普通
System.out.println(Level.FINER.getLocalizedName()); // 詳細
System.out.println(Level.FINEST.getLocalizedName()); // 最も詳細
String getName ()
System.out.println(Level.OFF.getName()); // OFF
System.out.println(Level.ALL.getName()); // ALL
System.out.println(Level.SEVERE.getName()); // SEVERE
System.out.println(Level.WARNING.getName()); // WARNING
System.out.println(Level.INFO.getName()); // INFO
System.out.println(Level.CONFIG.getName()); // CONFIG
System.out.println(Level.FINE.getName()); // FINE
System.out.println(Level.FINER.getName()); // FINER
System.out.println(Level.FINEST.getName()); // FINEST
String getResourceBundleName ()
final var ret = Level.SEVERE.getResourceBundleName();
System.out.println(ret); // sun.util.logging.resources.logging
class SampleLevel extends Level {
SampleLevel() {
super("SAMPLE", 600, "com.example.logging.LevelResourceBundle");
}
}
final var sampleLevel = new SampleLevel();
final var ret = sampleLevel.getResourceBundleName();
System.out.println(ret); // com.example.logging.LevelResourceBundle
int hashCode ()
System.out.println(Level.SEVERE.hashCode()); // 1000
System.out.println(Level.INFO.hashCode()); // 800
System.out.println(Level.FINE.hashCode()); // 500
class SampleLevel extends Level {
SampleLevel() {
// 意図的に、Level.FINE と同じ値 (500) にします。
super("SAMPLE", 500);
}
}
// 名前が違っていても値が同じであれば、ハッシュコードも同じになります。
System.out.println(new SampleLevel().hashCode()); // 500
final int intValue ()
System.out.println(Level.OFF.intValue()); // 2147483647 (intの最大値)
System.out.println(Level.ALL.intValue()); // -2147483648 (intの最小値)
System.out.println(Level.SEVERE.intValue()); // 1000
System.out.println(Level.WARNING.intValue()); // 900
System.out.println(Level.INFO.intValue()); // 800
System.out.println(Level.CONFIG.intValue()); // 700
System.out.println(Level.FINE.intValue()); // 500
System.out.println(Level.FINER.intValue()); // 400
System.out.println(Level.FINEST.intValue()); // 300
static Level parse (String name)
// 名前で取得
final var levelA = Level.parse("INFO");
System.out.println(levelA.getName()); // "INFO"
System.out.println(levelA.intValue()); // 800
// 値で取得 (INFO = 800)
final var levelB = Level.parse("800");
System.out.println(levelB.getName()); // "INFO"
System.out.println(levelB.intValue()); // 800
// 定義されていない値を指定
final var level = Level.parse("123");
System.out.println(level.getName()); // "123"
System.out.println(level.intValue()); // 123
// 定義されていない名前を指定
//Level.parse("AAA"); // IllegalArgumentException: Bad level "AAA"
final String toString ()
final var ret1 = Level.SEVERE.toString();
System.out.println(ret1); // SEVERE
final var ret2 = Level.INFO.toString();
System.out.println(ret2); // INFO
final var ret3 = Level.CONFIG.toString();
System.out.println(ret3); // CONFIG