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

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


概要

クラス構成

Loggerクラスを使うと、ログをコンソールやファイルに出力することができます。

Loggerを使う大まかな流れは

  1. Logger.getLogger でLoggerオブジェクトを取得
  2. log メソッドでログ出力を要求
    →登録されているHandler(コンソールやファイル)が実際にログを出力

となります。

final var logger = Logger.getLogger("com.example.logging");

// 分かりやすさのために、親のロガーのハンドラは使わないようにします。
logger.setUseParentHandlers(false);

// コンソールに対してログを出力するように設定します。
final var handler = new ConsoleHandler();
logger.addHandler(handler);

// すべてのレベルのログを出力するように設定します。
logger.setLevel(Level.ALL);
handler.setLevel(Level.ALL);

// logメソッドを使い、ログ出力を要求します。
logger.log(Level.INFO, "INFO LOG!");

// もしくは、各ログレベルに応じたメソッドを使うこともできます。
logger.severe("SEVERE LOG!");
logger.fine("FINE LOG!");

// 結果
// ↓
//3月 10, 2022 2:41:12 午後 com.example.logging.LoggerTest$1 method
//情報: INFO LOG!
//3月 10, 2022 2:41:12 午後 com.example.logging.LoggerTest$1 method
//重大: SEVERE LOG!
//3月 10, 2022 2:41:12 午後 com.example.logging.LoggerTest$1 method
//普通: FINE LOG!

他にも、LogManager でハンドラやログレベルの設定をファイルからロードすることもできます。

ログ出力(ロギング)の基本については下記の記事でもまとめていますので、よろしければそちらもご参照ください。

注意点

Loggerは、ロガーの名前による名前空間によって階層構造をとります。
よって、Loggerオブジェクトは、親となるLoggerオブジェクトを持つことがあります。

ロガーの階層構造

その場合、子のLoggerでログ出力を要求すると、親のLoggerにも要求が伝わります。
そのことを知らないと、あれ何で2回も同じログが出力されているのだろう?ということになるのでご注意ください。

final var logger = Logger.getLogger("com.example.logging");
logger.addHandler(new ConsoleHandler());

// ルートロガーを取得します。
Logger parent = logger.getParent();
while (parent.getParent() != null) {
    parent = parent.getParent();
}

// ルートロガーは名前が空になります。
final var root = parent;
System.out.println(root.getName()); // ""
System.out.println(root.getLevel()); // INFO

// ルートロガーは、デフォルトでConsoleHandlerを持ちます。
System.out.println(Arrays.toString(root.getHandlers())); // [java.util.logging.ConsoleHandler@4e0b6f09]

logger.log(Level.INFO, "TEST LOG!");

// 結果
// ↓
//3月 10, 2022 2:43:35 午後 com.example.logging.LoggerTest$2 method
//情報: TEST LOG!
//3月 10, 2022 2:43:35 午後 com.example.logging.LoggerTest$2 method
//情報: TEST LOG!

logger.logの呼び出しは1回なのに、コンソールには2回ログが表示されているのが分かりますね。
ルートロガーと子のロガーがそれぞれ ConsoleHandler を持っているので、両方で出力されます。


補足

  • 本記事の多くの例では、分かりやすさとシンプルさを優先して setUseParentHandlers(false) で親のハンドラは使わないように指定しています。
  • 通常のアプリでは setUseParentHandlers(false) としないほうが良い場合もあると思いますので、そのあたりは適時読み替えてください。

フィールド

static final Logger global

非推奨。 このフィールドの初期化時にデッドロックが発生する可能性があります。

非推奨です。

static final String GLOBAL_LOGGER_NAME

GLOBAL_LOGGER_NAMEは、グローバル・ロガーの名前です。

System.out.println(Logger.GLOBAL_LOGGER_NAME); // global

final var logger = Logger.getGlobal();
System.out.println(logger.getName()); // global

コンストラクタ

Logger (String name, String resourceBundleName)

名前付きサブシステムのロガーを構築するprotectedメソッドです。

独自のロガーを作ることはそんなにないと思いますので、使用例は割愛します。
もし独自のロガーを作成するさいは、API仕様の「サブクラス化に関する情報」もご確認ください。

メソッド

void addHandler (Handler handler)

ログHandlerを追加してログ・メッセージを受け取ります。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// []
System.out.println(Arrays.toString(logger.getHandlers()));

// ハンドラが登録されていないのでなにも起きません。
logger.info("TEST LOG : 1");

// 結果 (コンソール)
// ↓
// <なにも表示されません>

final var handler = new ConsoleHandler();
System.out.println(handler.getLevel()); // INFO

logger.addHandler(handler);

// [java.util.logging.ConsoleHandler@46d59067]
System.out.println(Arrays.toString(logger.getHandlers()));

logger.info("TEST LOG : 2");

// 結果 (コンソール)
// ↓
//3月 12, 2022 3:28:24 午後 com.example.logging.LoggerTest$3 method
//情報: TEST LOG : 2
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// コンソールとファイルの両方へ出力させます。
logger.addHandler(new ConsoleHandler());

final var pattern = Path.of("R:", "java-work", "log.txt");
logger.addHandler(new FileHandler(pattern.toString(), true));

// [java.util.logging.ConsoleHandler@9816741, java.util.logging.FileHandler@1e16c0aa]
System.out.println(Arrays.toString(logger.getHandlers()));

logger.info("TEST LOG!");

// 結果 (コンソール)
// ↓
//3月 10, 2022 3:10:46 午後 com.example.logging.LoggerTest$4 method
//情報: TEST LOG!

// 結果 (ファイル)
// ↓
// --- PowerShell ---
//PS R:\java-work> cat .\log.txt
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T06:10:46.844064200Z</date>
//  <millis>1646892646844</millis>
//  <nanos>64200</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>com.example.logging.LoggerTest$4</class>
//  <method>method</method>
//  <thread>1</thread>
//  <message>TEST LOG!</message>
//</record>
//</log>

void config (String msg)

CONFIGメッセージのログをとります。

configの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void config (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、CONFIGメッセージのログを記録します。

configの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void entering (String sourceClass, String sourceMethod)

メソッド・エントリのログをとります。

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

class EntryTest {
    public void func() {
        try {
            logger.entering("EntryTest", "func");
        } finally {
            logger.exiting("EntryTest", "func");
        }
    }
}

new EntryTest().func();

// 結果
// ↓
//3月 10, 2022 3:21:24 午後 EntryTest func
//詳細: ENTRY
//3月 10, 2022 3:21:24 午後 EntryTest func
//詳細: RETURN

void entering (String sourceClass, String sourceMethod, Object param1)

1つのパラメータを持つメソッド・エントリのログをとります。

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

class EntryTest {
    public void func() {
        try {
            logger.entering("EntryTest", "func", "Param!");
        } finally {
            logger.exiting("EntryTest", "func", "Result!");
        }
    }
}

new EntryTest().func();

// 結果
// ↓
//3月 12, 2022 3:34:14 午後 EntryTest func
//詳細: ENTRY Param!
//3月 12, 2022 3:34:14 午後 EntryTest func
//詳細: RETURN Result!

void entering (String sourceClass, String sourceMethod, Object[] params)

パラメータの配列を持つメソッド・エントリのログをとります。

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

class EntryTest {
    public void func() {
        try {
            logger.entering("EntryTest", "func",
                    new String[]{"Param A", "Param B", "Param C"});
        } finally {
            logger.exiting("EntryTest", "func", "Result!");
        }
    }
}

new EntryTest().func();

// 結果
// ↓
//3月 12, 2022 3:35:15 午後 EntryTest func
//詳細: ENTRY Param A Param B Param C
//3月 12, 2022 3:35:15 午後 EntryTest func
//詳細: RETURN Result!

void exiting (String sourceClass, String sourceMethod)

メソッド復帰のログをとります。

exiting の使用例は、entering(String sourceClass, String sourceMethod) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void exiting (String sourceClass, String sourceMethod, Object result)

結果オブジェクトを持つメソッド復帰のログをとります。

exiting の使用例は、entering(String sourceClass, String sourceMethod, Object param1) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void fine (String msg)

FINEメッセージのログをとります。

fineの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void fine (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、FINEメッセージのログを記録します。

fineの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void finer (String msg)

FINERメッセージのログをとります。

finerの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void finer (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、FINERメッセージのログを記録します。

finerの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void finest (String msg)

FINESTメッセージのログをとります。

finestの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void finest (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、FINESTメッセージのログを記録します。

finestの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static Logger getAnonymousLogger ()

匿名Loggerを作成します。

final var logger = Logger.getAnonymousLogger();

System.out.println(logger.getName()); // null
System.out.println(logger.getLevel()); // null

final var parent = logger.getParent();
System.out.println(parent.getName()); // ""
System.out.println(parent.getLevel()); // INFO
final var logger = Logger.getAnonymousLogger();
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.info("TEST LOG!");

// 結果
// ↓
//3月 12, 2022 3:37:14 午後 com.example.logging.LoggerTest$8 method
//情報: TEST LOG!

static Logger getAnonymousLogger (String resourceBundleName)

匿名Loggerを作成します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getAnonymousLogger("com.example.logging.LoggerResourceBundle");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.info("SAMPLE");

// 結果
// ↓
//3月 12, 2022 3:38:15 午後 com.example.logging.LoggerTest$9 method
//情報: サンプル

Filter getFilter ()

このLoggerの現在のフィルタを返します。

getFilter の使用例は、setFilter(Filter newFilter) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static final Logger getGlobal ()

Logger.GLOBAL_LOGGER_NAMEという名前でグローバル・ロガー・オブジェクトを返します。

System.out.println(Logger.GLOBAL_LOGGER_NAME); // global

final var logger = Logger.getGlobal();
System.out.println(logger.getName()); // global

Handler[] getHandlers ()

このロガーに関連したHandlerを返します。

final var logger = Logger.getLogger("com.example.logging");

// []
System.out.println(Arrays.toString(logger.getHandlers()));

final var consoleHandler = new ConsoleHandler();
logger.addHandler(consoleHandler);

// [java.util.logging.ConsoleHandler@29290e83]
System.out.println(Arrays.toString(logger.getHandlers()));

final var fileHandler = new FileHandler();
logger.addHandler(fileHandler);

// [java.util.logging.ConsoleHandler@29290e83, java.util.logging.FileHandler@25d9da2a]
System.out.println(Arrays.toString(logger.getHandlers()));

logger.removeHandler(consoleHandler);

// [java.util.logging.FileHandler@25d9da2a]
System.out.println(Arrays.toString(logger.getHandlers()));

logger.removeHandler(fileHandler);

// []
System.out.println(Arrays.toString(logger.getHandlers()));

Level getLevel ()

このLoggerに指定されたログLevelを取得します。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

System.out.println(logger.getLevel()); // null

logger.setLevel(Level.FINE);
System.out.println(logger.getLevel()); // FINE

final var handler = new ConsoleHandler();
handler.setLevel(Level.ALL);
logger.addHandler(handler);

logger.info("INFO LOG!");
logger.fine("FINE LOG!");
logger.finest("FINEST LOG!");

// 結果
// ↓
//3月 12, 2022 3:45:54 午後 com.example.logging.LoggerTest$10 method
//情報: INFO LOG!
//3月 12, 2022 3:45:54 午後 com.example.logging.LoggerTest$10 method
//普通: FINE LOG!

static Logger getLogger (String name)

指定されたサブシステムのロガーを検出または作成します。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

System.out.println(logger.getName()); // com.example.logging
System.out.println(logger.getLevel()); // null

logger.addHandler(new ConsoleHandler());

logger.info("TEST LOG!");

// 結果
// ↓
//3月 10, 2022 3:52:58 午後 com.example.logging.LoggerTest$11 method
//情報: TEST LOG!

static Logger getLogger (String name, String resourceBundleName)

指定されたサブシステムのロガーを検出または作成します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger(
        "com.example.logging",
        "com.example.logging.LoggerResourceBundle");
logger.setUseParentHandlers(false);

// com.example.logging.LoggerResourceBundle
System.out.println(logger.getResourceBundleName());

logger.addHandler(new ConsoleHandler());

logger.info("SAMPLE");

// 結果
// ↓
//3月 10, 2022 3:54:34 午後 com.example.logging.LoggerTest$12 method
//情報: サンプル

String getName ()

このロガーの名前を返します。

final var logger = Logger.getLogger("com.example.logging");
System.out.println(logger.getName()); // com.example.logging
System.out.println(logger.getLevel()); // null

logger.addHandler(new ConsoleHandler());
logger.setUseParentHandlers(false);

logger.info("TEST LOG!");

// 結果
// ↓
//3月 10, 2022 3:56:23 午後 com.example.logging.LoggerTest$13 method
//情報: TEST LOG!

Logger getParent ()

このロガーの親を返します。

// 名前空間で自動的に親が設定される例です。
final var comLogger = Logger.getLogger("com");
System.out.println(comLogger.getName()); // "com"

final var comExampleLogger = Logger.getLogger("com.example");
System.out.println(comExampleLogger.getName()); // "com.example"

final var parent = comExampleLogger.getParent();
System.out.println(parent.getName()); // "com"

// ルート・ロガーです。
final var parentParent = parent.getParent();
System.out.println(parentParent.getName()); // ""

System.out.println(parentParent.getParent()); // null

ResourceBundle getResourceBundle ()

このロガーのローカリゼーション・リソース・バンドルを取得します。

getResourceBundle の使用例は、setResourceBundle(ResourceBundle bundle) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getResourceBundleName ()

このロガーのローカリゼーション・リソース・バンドルの名前を取得します。

getResourceBundleName の使用例は、getLogger(String name, String resourceBundleName) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

boolean getUseParentHandlers ()

このロガーが出力をその親ロガーに送信しているかどうかを検出します。

getUseParentHandlers の使用例は、setUseParentHandlers(boolean useParentHandlers) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void info (String msg)

INFOメッセージのログをとります。

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 LOG!");
logger.warning("WARNING LOG!");
logger.info("INFO LOG!");
logger.config("CONFIG LOG!");
logger.fine("FINE LOG!");
logger.finer("FINER LOG!");
logger.finest("FINEST LOG!");

// 結果
// ↓
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//重大: SEVERE LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//警告: WARNING LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//情報: INFO LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//構成: CONFIG LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//普通: FINE LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//詳細: FINER LOG!
//3月 10, 2022 4:04:12 午後 com.example.logging.LoggerTest$14 method
//最も詳細: FINEST LOG!

void info (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、INFOメッセージのログを記録します。

Supplier を使うケースの例:

ログのメッセージを作成するためになにか重い処理が必要となるとします。
(例えばログに出力するための情報をデータベースから取得する、など)

Supplierを使うことで、実際にログ出力する直前までその重い処理を遅延させることができます。

つまり、ログレベルの制御などでログが出力されないときは、Supplierは実行されず(重い処理が実行されない)パフォーマンスが良くなるということですね。

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(() -> {
    // ... なにか重い処理 ...
    return "SEVERE LOG!";
});
logger.warning(() -> {
    // ... なにか重い処理 ...
    return "WARNING LOG!";
});
logger.info(() -> {
    // ... なにか重い処理 ...
    return "INFO LOG!";
});
logger.config(() -> {
    // ... なにか重い処理 ...
    return "CONFIG LOG!";
});
logger.fine(() -> {
    // ... なにか重い処理 ...
    return "FINE LOG!";
});
logger.finer(() -> {
    // ... なにか重い処理 ...
    return "FINER LOG!";
});
logger.finest(() -> {
    // ... なにか重い処理 ...
    return "FINEST LOG!";
});

// 結果
// ↓
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//重大: SEVERE LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//警告: WARNING LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//情報: INFO LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//構成: CONFIG LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//普通: FINE LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//詳細: FINER LOG!
//3月 10, 2022 4:05:33 午後 com.example.logging.LoggerTest$15 method
//最も詳細: FINEST LOG!

boolean isLoggable (Level level)

指定されたレベルのメッセージがこのロガーによって実際にロギングされるかどうかをチェックします。

final var logger = Logger.getLogger("com.example.logging");

logger.setLevel(Level.ALL);

System.out.println(logger.isLoggable(Level.SEVERE)); // true
System.out.println(logger.isLoggable(Level.WARNING)); // true
System.out.println(logger.isLoggable(Level.INFO)); // true
System.out.println(logger.isLoggable(Level.CONFIG)); // true
System.out.println(logger.isLoggable(Level.FINE)); // true
System.out.println(logger.isLoggable(Level.FINER)); // true
System.out.println(logger.isLoggable(Level.FINEST)); // true

logger.setLevel(Level.INFO);

System.out.println(logger.isLoggable(Level.SEVERE)); // true
System.out.println(logger.isLoggable(Level.WARNING)); // true
System.out.println(logger.isLoggable(Level.INFO)); // true
System.out.println(logger.isLoggable(Level.CONFIG)); // false
System.out.println(logger.isLoggable(Level.FINE)); // false
System.out.println(logger.isLoggable(Level.FINER)); // false
System.out.println(logger.isLoggable(Level.FINEST)); // false

logger.setLevel(Level.OFF);

System.out.println(logger.isLoggable(Level.SEVERE)); // false
System.out.println(logger.isLoggable(Level.WARNING)); // false
System.out.println(logger.isLoggable(Level.INFO)); // false
System.out.println(logger.isLoggable(Level.CONFIG)); // false
System.out.println(logger.isLoggable(Level.FINE)); // false
System.out.println(logger.isLoggable(Level.FINER)); // false
System.out.println(logger.isLoggable(Level.FINEST)); // false

void log (Level level, String msg)

引数のないメッセージのログをとります。

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.log(Level.SEVERE, "SEVERE LOG!");
logger.log(Level.WARNING, "WARNING LOG!");
logger.log(Level.INFO, "INFO LOG!");
logger.log(Level.CONFIG, "CONFIG LOG!");
logger.log(Level.FINE, "FINE LOG!");
logger.log(Level.FINER, "FINER LOG!");
logger.log(Level.FINEST, "FINEST LOG!");

// 結果
// ↓
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//重大: SEVERE LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//警告: WARNING LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//情報: INFO LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//構成: CONFIG LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//普通: FINE LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//詳細: FINER LOG!
//3月 10, 2022 4:08:16 午後 com.example.logging.LoggerTest$16 method
//最も詳細: FINEST LOG!

void log (Level level, String msg, Object param1)

1つのオブジェクトのパラメータを持つメッセージのログをとります。

パラメータの param1 以外は、log(Level level, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// param表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

logger.log(Level.INFO, "TEST LOG!", "Param!");

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T07:12:46.997867Z</date>
//  <millis>1646896366997</millis>
//  <nanos>867000</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>com.example.logging.LoggerTest$17</class>
//  <method>method</method>
//  <thread>1</thread>
//  <message>TEST LOG!</message>
//  <param>Param!</param>
//</record>

void log (Level level, String msg, Object[] params)

オブジェクトの引数の配列を持つメッセージのログをとります。

パラメータの params 以外は、log(Level level, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// param表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

logger.log(Level.INFO, "TEST LOG!",
        new String[]{"Param A", "Param B", "Param C"});

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T07:48:20.054755200Z</date>
//  <millis>1646898500054</millis>
//  <nanos>755200</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>com.example.logging.LoggerTest$18</class>
//  <method>method</method>
//  <thread>1</thread>
//  <message>TEST LOG!</message>
//  <param>Param A</param>
//  <param>Param B</param>
//  <param>Param C</param>
//</record>

void log (Level level, String msg, Throwable thrown)

関連するThrowable情報を持つメッセージのログをとります。

パラメータの thrown 以外は、log(Level level, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.log(Level.SEVERE, "TEST LOG!", new IllegalStateException("TEST EXCEPTION!"));

// 結果
// ↓
//3月 12, 2022 4:03:18 午後 com.example.logging.LoggerTest$19 method
//重大: TEST LOG!
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$19.method(LoggerTest.java:1230)
//...

void log (Level level, Throwable thrown, Supplier<String> msgSupplier)

関連するThrowable情報を含む、遅延構築されたメッセージのログを記録します。

パラメータの level については、log(Level level, String msg) のAPI使用例もご参照ください。
また、Supplier を使う利点については info(Supplier<String> msgSupplier) のコメントもご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.log(Level.SEVERE, new IllegalStateException("TEST EXCEPTION!"), () -> {
    // ... なにか重い処理 ...
    return "TEST LOG!";
});

// 結果
// ↓
//3月 10, 2022 4:56:48 午後 com.example.logging.LoggerTest$20 method
//重大: TEST LOG!
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$20.method(LoggerTest.java:1265)
//...

void log (Level level, Supplier<String> msgSupplier)

メッセージが実際に記録されるロギング・レベルである場合にのみ構築される、メッセージのログを記録します。

パラメータの level については、log(Level level, String msg) のAPI使用例もご参照ください。
また、Supplier を使う利点については info(Supplier<String> msgSupplier) のコメントもご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.log(Level.INFO, () -> {
    // ... なにか重い処理 ...
    return "TEST LOG!";
});

// 結果
// ↓
//3月 10, 2022 4:59:47 午後 com.example.logging.LoggerTest$21 method
//情報: TEST LOG!

void log (LogRecord record)

LogRecordのログをとります。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.log(new LogRecord(Level.INFO, "TEST LOG!"));

// 結果
// ↓
//3月 10, 2022 5:15:48 午後 com.example.logging.LoggerTest$28 method
//情報: TEST LOG!

void logp (Level level, String sourceClass, String sourceMethod, String msg)

ソース・クラスとメソッドを指定する、引数のないメッセージのログをとります。

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.logp(Level.SEVERE, "SampleClass", "sampleMethod", "SEVERE LOG!");
logger.logp(Level.WARNING, "SampleClass", "sampleMethod", "WARNING LOG!");
logger.logp(Level.INFO, "SampleClass", "sampleMethod", "INFO LOG!");
logger.logp(Level.CONFIG, "SampleClass", "sampleMethod", "CONFIG LOG!");
logger.logp(Level.FINE, "SampleClass", "sampleMethod", "FINE LOG!");
logger.logp(Level.FINER, "SampleClass", "sampleMethod", "FINER LOG!");
logger.logp(Level.FINEST, "SampleClass", "sampleMethod", "FINEST LOG!");

// 結果
// ↓
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//重大: SEVERE LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//警告: WARNING LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//情報: INFO LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//構成: CONFIG LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//普通: FINE LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//詳細: FINER LOG!
//3月 10, 2022 5:05:29 午後 SampleClass sampleMethod
//最も詳細: FINEST LOG!

void logp (Level level, String sourceClass, String sourceMethod, String msg, Object param1)

ソース・クラスとメソッドを指定し、ログ・メッセージに対して単一のオブジェクト・パラメータを持つメッセージのログをとります。

パラメータの param1 以外は、logp(Level level, String sourceClass, String sourceMethod, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// param表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

logger.logp(Level.INFO, "SampleClass", "sampleMethod",
        "TEST LOG!", "Param!");

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T08:08:20.067530Z</date>
//  <millis>1646899700067</millis>
//  <nanos>530000</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>SampleClass</class>
//  <method>sampleMethod</method>
//  <thread>1</thread>
//  <message>TEST LOG!</message>
//  <param>Param!</param>
//</record>

void logp (Level level, String sourceClass, String sourceMethod, String msg, Object[] params)

ソース・クラスとメソッドを指定する、オブジェクトの引数の配列を持つメッセージのログをとります。

パラメータの params 以外は、logp(Level level, String sourceClass, String sourceMethod, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// params表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

logger.logp(Level.INFO, "SampleClass", "sampleMethod",
        "TEST LOG!", new String[]{"Param A", "Param B", "Param C"});

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T08:10:18.473365300Z</date>
//  <millis>1646899818473</millis>
//  <nanos>365300</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>SampleClass</class>
//  <method>sampleMethod</method>
//  <thread>1</thread>
//  <message>TEST LOG!</message>
//  <param>Param A</param>
//  <param>Param B</param>
//  <param>Param C</param>
//</record>

void logp (Level level, String sourceClass, String sourceMethod, String msg, Throwable thrown)

ソース・クラスとメソッドを指定し、関連するThrowable情報を持つメッセージのログをとります。

パラメータの thrown 以外は、logp(Level level, String sourceClass, String sourceMethod, String msg) と同じです。
そちらのAPI使用例もご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.logp(Level.SEVERE, "SampleClass", "sampleMethod",
        "TEST LOG!", new IllegalStateException("TEST EXCEPTION!"));

// 結果
// ↓
//3月 10, 2022 5:11:53 午後 SampleClass sampleMethod
//重大: TEST LOG!
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$25.method(LoggerTest.java:1527)
//...

void logp (Level level, String sourceClass, String sourceMethod, Throwable thrown, Supplier<String> msgSupplier)

ソース・クラスとメソッドを指定し、関連するThrowable情報を含む遅延構築されたメッセージのログを記録します。

パラメータの level については、logp(Level level, String sourceClass, String sourceMethod, String msg) のAPI使用例もご参照ください。
また、Supplier を使う利点については info(Supplier<String> msgSupplier) のコメントもご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.logp(Level.SEVERE, "SampleClass", "sampleMethod",
        new IllegalStateException("TEST EXCEPTION!"), () -> {
            // ... なにか重い処理 ...
            return "TEST LOG!";
        });

// 結果
// ↓
//3月 10, 2022 5:13:46 午後 SampleClass sampleMethod
//重大: TEST LOG!
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$26.method(LoggerTest.java:1563)
//...

void logp (Level level, String sourceClass, String sourceMethod, Supplier<String> msgSupplier)

ソース・クラスとメソッドを指定する、引数のない遅延構築されたメッセージのログを記録します。

パラメータの level については、logp(Level level, String sourceClass, String sourceMethod, String msg) のAPI使用例もご参照ください。
また、Supplier を使う利点については info(Supplier<String> msgSupplier) のコメントもご参照ください。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

logger.logp(Level.INFO, "SampleClass", "sampleMethod", () -> {
    // ... なにか重い処理 ...
    return "TEST LOG!";
});

// 結果
// ↓
//3月 10, 2022 5:14:52 午後 SampleClass sampleMethod
//情報: TEST LOG!

void logrb (Level level, String sourceClass, String sourceMethod, String bundleName, String msg)

非推奨。 代わりにlogrb(java.util.logging.Level, java.lang.String, java.lang.String, java.util.ResourceBundle, java.lang.String, java.lang.Object...)を使用してください。

非推奨です。

void logrb (Level level, String sourceClass, String sourceMethod, String bundleName, String msg, Object param1)

非推奨。 代わりにlogrb(java.util.logging.Level, java.lang.String, java.lang.String, java.util.ResourceBundle, java.lang.String, java.lang.Object...)を使用してください

非推奨です。

void logrb (Level level, String sourceClass, String sourceMethod, String bundleName, String msg, Object[] params)

非推奨。 代わりにlogrb(java.util.logging.Level, java.lang.String, java.lang.String, java.util.ResourceBundle, java.lang.String, java.lang.Object...)を使用してください。

非推奨です。

void logrb (Level level, String sourceClass, String sourceMethod, String bundleName, String msg, Throwable thrown)

非推奨。 代わりにlogrb(java.util.logging.Level, java.lang.String, java.lang.String, java.util.ResourceBundle, java.lang.String, java.lang.Throwable)を使用してください。

非推奨です。

void logrb (Level level, String sourceClass, String sourceMethod, ResourceBundle bundle, String msg, Object... params)

ソース・クラス、メソッド、およびリソース・バンドルを指定し、メッセージ・パラメータのオプションのリストを含むメッセージのログを記録します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// params表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

final var bundle = ResourceBundle.getBundle("com.example.logging.LoggerResourceBundle");

logger.logrb(Level.INFO, "SampleClass", "sampleMethod", bundle,
        "SAMPLE", "Param A", "Param B", "Param C");

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T10:36:55.051176100Z</date>
//  <millis>1646908615051</millis>
//  <nanos>176100</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>SampleClass</class>
//  <method>sampleMethod</method>
//  <thread>1</thread>
//  <message>サンプル</message>
//  <key>SAMPLE</key>
//  <catalog>com.example.logging.LoggerResourceBundle</catalog>
//  <param>Param A</param>
//  <param>Param B</param>
//  <param>Param C</param>
//</record>

void logrb (Level level, String sourceClass, String sourceMethod, ResourceBundle bundle, String msg, Throwable thrown)

ソース・クラス、メソッド、およびリソース・バンドルを指定し、関連するThrowable情報を含むメッセージのログを記録します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

final var bundle = ResourceBundle.getBundle("com.example.logging.LoggerResourceBundle");

logger.logrb(Level.SEVERE, "SampleClass", "sampleMethod", bundle,
        "SAMPLE", new IllegalStateException("TEST EXCEPTION!"));

// 結果
// ↓
//3月 10, 2022 5:27:26 午後 SampleClass sampleMethod
//重大: サンプル
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$30.method(LoggerTest.java:1739)
//...

void logrb (Level level, ResourceBundle bundle, String msg, Object... params)

ソース・クラス、メソッド、およびリソース・バンドルを指定し、メッセージ・パラメータのオプションのリストを含むメッセージのログを記録します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

// params表示のためにXMLフォーマッタを使います。
final var handler = new ConsoleHandler();
handler.setFormatter(new XMLFormatter());
logger.addHandler(handler);

final var bundle = ResourceBundle.getBundle("com.example.logging.LoggerResourceBundle");

logger.logrb(Level.INFO, bundle, "SAMPLE", "Param A", "Param B", "Param C");

// 結果
// ↓
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T09:59:15.937614400Z</date>
//  <millis>1646906355937</millis>
//  <nanos>614400</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>com.example.logging.LoggerTest$31</class>
//  <method>method</method>
//  <thread>1</thread>
//  <message>サンプル</message>
//  <key>SAMPLE</key>
//  <catalog>com.example.logging.LoggerResourceBundle</catalog>
//  <param>Param A</param>
//  <param>Param B</param>
//  <param>Param C</param>
//</record>

void logrb (Level level, ResourceBundle bundle, String msg, Throwable thrown)

ソース・クラス、メソッド、およびリソース・バンドルを指定し、関連するThrowable情報を含むメッセージのログを記録します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

final var bundle = ResourceBundle.getBundle("com.example.logging.LoggerResourceBundle");

logger.logrb(Level.SEVERE, bundle, "SAMPLE", new IllegalStateException("TEST EXCEPTION!"));

// 結果
// ↓
//3月 10, 2022 5:28:21 午後 com.example.logging.LoggerTest$32 method
//重大: サンプル
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$32.method(LoggerTest.java:1848)
//...

void removeHandler (Handler handler)

ログHandlerを削除します。

removeHandler の使用例は、getHandlers() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setFilter (Filter newFilter)

フィルタを設定してこのLoggerの出力を制御します。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

logger.addHandler(new ConsoleHandler());

// フィルタなしの例です。
System.out.println(logger.getFilter()); // null

logger.info("abcde");
logger.info("ABCDE");

// 結果
// ↓
//3月 10, 2022 5:31:19 午後 com.example.logging.LoggerTest$33 method
//情報: abcde
//3月 10, 2022 5:31:19 午後 com.example.logging.LoggerTest$33 method
//情報: ABCDE

// フィルタありの例です。
final var filter = new Filter() {
    @Override
    public boolean isLoggable(LogRecord logRecord) {
        // 小文字だけを許容します。
        return logRecord.getMessage().matches("[a-z]*");
    }
};

logger.setFilter(filter);

System.out.println(logger.getFilter() == filter); // true

logger.info("abcde");
logger.info("ABCDE");

// 結果
// ↓
//3月 10, 2022 5:31:19 午後 com.example.logging.LoggerTest$33 method
//情報: abcde

void setLevel (Level newLevel)

このロガーがどのメッセージ・レベルをロギングするかを指定するログ・レベルを設定します。

final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);

final var handler = new ConsoleHandler();
handler.setLevel(Level.ALL);
logger.addHandler(handler);

logger.setLevel(Level.ALL);
System.out.println(logger.getLevel()); // ALL

logger.severe("SEVERE LOG!");
logger.warning("WARNING LOG!");
logger.info("INFO LOG!");
logger.config("CONFIG LOG!");
logger.fine("FINE LOG!");
logger.finer("FINER LOG!");
logger.finest("FINEST LOG!");

// 結果
// ↓
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//重大: SEVERE LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//警告: WARNING LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//情報: INFO LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//構成: CONFIG LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//普通: FINE LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//詳細: FINER LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//最も詳細: FINEST LOG!

logger.setLevel(Level.INFO);
System.out.println(logger.getLevel()); // INFO

logger.severe("SEVERE LOG!");
logger.warning("WARNING LOG!");
logger.info("INFO LOG!");
logger.config("CONFIG LOG!");
logger.fine("FINE LOG!");
logger.finer("FINER LOG!");
logger.finest("FINEST LOG!");

// 結果
// ↓
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//重大: SEVERE LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//警告: WARNING LOG!
//3月 10, 2022 5:34:57 午後 com.example.logging.LoggerTest$34 method
//情報: INFO LOG!

logger.setLevel(Level.OFF);
System.out.println(logger.getLevel()); // OFF

logger.severe("SEVERE LOG!");
logger.warning("WARNING LOG!");
logger.info("INFO LOG!");
logger.config("CONFIG LOG!");
logger.fine("FINE LOG!");
logger.finer("FINER LOG!");
logger.finest("FINEST LOG!");

// 結果
// ↓
// <なにも表示されません>

void setParent (Logger parent)

このロガーの親を設定します。
...
これはアプリケーション・コードから呼び出してはいけません。

API仕様に "アプリケーション・コードから呼び出してはいけません" とあるので、コード例は割愛します。

void setResourceBundle (ResourceBundle bundle)

このロガーのリソース・バンドルを設定します。

package com.example.logging;

import java.util.ListResourceBundle;

public class LoggerResourceBundle extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return new Object[][]{
                {"SAMPLE", "サンプル"}
        };
    }
}
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(new ConsoleHandler());

System.out.println(logger.getResourceBundle()); // null

final var bundle = ResourceBundle.getBundle("com.example.logging.LoggerResourceBundle");
logger.setResourceBundle(bundle);

System.out.println(logger.getResourceBundle() == bundle); // true

logger.info("SAMPLE");

// 結果
// ↓
//3月 10, 2022 5:36:35 午後 com.example.logging.LoggerTest$35 method
//情報: サンプル

void setUseParentHandlers (boolean useParentHandlers)

このロガーが出力をその親ロガーに送信すべきかどうかを指定します。

final var logger = Logger.getLogger("com.example.logging");
System.out.println(logger.getUseParentHandlers()); // true

logger.addHandler(new ConsoleHandler());

// 1つ親のロガーを作成します。
final var parent = Logger.getLogger("com.example");
parent.setUseParentHandlers(false);
System.out.println(parent.getUseParentHandlers()); // false

// 親はXMLフォーマットで出力させます。
final var parentHandler = new ConsoleHandler();
parentHandler.setFormatter(new XMLFormatter());
parent.addHandler(parentHandler);

System.out.println(logger.getParent() == parent); // true

// 子のロガーで出力します。
logger.info("TEST LOG : 1");

// 結果 (親と子の両方のハンドラで出力されます)
// ↓
//3月 10, 2022 5:40:30 午後 com.example.logging.LoggerTest$36 method
//情報: TEST LOG : 1
//
//<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//<!DOCTYPE log SYSTEM "logger.dtd">
//<log>
//<record>
//  <date>2022-03-10T08:40:30.781869900Z</date>
//  <millis>1646901630781</millis>
//  <nanos>869900</nanos>
//  <sequence>1</sequence>
//  <logger>com.example.logging</logger>
//  <level>INFO</level>
//  <class>com.example.logging.LoggerTest$36</class>
//  <method>method</method>
//  <thread>1</thread>
//  <message>TEST LOG : 1</message>
//</record>

// 親のハンドラ使用を停止します。
logger.setUseParentHandlers(false);
System.out.println(logger.getUseParentHandlers()); // false

// 子のロガーで出力します。
logger.info("TEST LOG : 2");

// 結果 (子のハンドラのみで出力されます)
// ↓
//3月 10, 2022 5:40:30 午後 com.example.logging.LoggerTest$36 method
//情報: TEST LOG : 2

void severe (String msg)

SEVEREメッセージのログをとります。

severeの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void severe (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、SEVEREメッセージのログを記録します。

severeの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void throwing (String sourceClass, String sourceMethod, Throwable thrown)

例外をスローするログをとります。

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.throwing("SampleClass", "sampleMethod",
        new IllegalStateException("TEST EXCEPTION!"));

// 結果
// ↓
//3月 10, 2022 5:47:26 午後 SampleClass sampleMethod
//詳細: THROW
//java.lang.IllegalStateException: TEST EXCEPTION!
//	at com.example.logging.LoggerTest$37.method(LoggerTest.java:2195)
//...

void warning (String msg)

WARNINGメッセージのログをとります。

warningの使用例は、info(String msg) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void warning (Supplier<String> msgSupplier)

メッセージが実際にログに記録されるロギング・レベルである場合にのみ構築される、WARNINGメッセージのログを記録します。

warningの使用例は、info(Supplier<String> msgSupplier) にまとめて記載しました。
そちらのAPI使用例をご参照ください。


関連記事

ページの先頭へ