広告

Java : Level (ログ) - API使用例

Level (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

Levelクラスは、ロギング出力の制御に使用可能な一連の標準ロギング・レベルを定義します。 ロギングLevelオブジェクトは順序付けされており、順序付けされた整数によって指定されます。 特定のレベルでのロギングが有効化されると、それより高いすべてのレベルでのロギングも有効化されます。

クラス構成

Levelクラスは、ログ出力の制御に使います。

例えば、

  • 開発中は詳細なログまで出力したい
  • リリース版では必要最低限のログのみを出力したい

という制御が可能となります。

Levelには、以下のレベルが定義されています。

  • SEVERE (最高値)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST (最低値)

LoggerHandler に対して 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

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

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

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

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

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

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

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

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

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)

指定された整数値で名前付きLevelを作成します。

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)

指定された整数値と指定されたローカリゼーション・リソース名で名前付きLevelを作成します。

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)

2つのオブジェクトの値が等しいかどうかを比較します。

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 ()

現在のデフォルト・ロケールに対して、Levelのローカライズされた文字列名を返します。

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 ()

Levelのローカライズされていない文字列名を返します。

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 ()

レベルのローカリゼーション・リソース・バンドル名、またはローカリゼーション・バンドルが定義されていない場合はnullを返します。

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)

レベル名の文字列をLevelに構文解析します。

// 名前で取得
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 ()

このLevelの文字列表現を返します。

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

関連記事

ページの先頭へ