Java : StreamHandler (ログ) - API使用例
StreamHandler (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
StreamHandlerクラスは、指定したOutputStreamがログの出力先となるハンドラです。
主に、OutputStreamを使うハンドラの基底クラスとして使われます。
代表的なサブクラスとして、ConsoleHandlerやFileHandlerがあります。
final StreamHandler handler = new ConsoleHandler();
System.out.println(handler.getLevel()); // INFO
System.out.println(handler.getFormatter()); // java.util.logging.SimpleFormatter@6be968ce
System.out.println(handler.getFilter()); // null
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("TEST LOG!");
// 結果
// ↓
//10月 19, 2022 3:45:23 午後 com.example.logging.ConsoleHandlerTest$1 method
//情報: TEST LOG!
コンストラクタ
StreamHandler ()
final var outputStream = new ByteArrayOutputStream();
class SampleStreamHandler extends StreamHandler {
SampleStreamHandler() {
super();
setOutputStream(outputStream);
}
}
final var handler = new SampleStreamHandler();
System.out.println(handler.getLevel()); // INFO
System.out.println(handler.getFormatter()); // java.util.logging.SimpleFormatter@76d7e04
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("TEST LOG!");
handler.flush();
System.out.print(outputStream);
// 結果
// ↓
//3月 14, 2022 4:10:00 午後 com.example.logging.StreamHandlerTest$1 method
//情報: TEST LOG!
StreamHandler (OutputStream out, Formatter formatter)
final var outputStream = new ByteArrayOutputStream();
final var handler = new StreamHandler(outputStream, new SimpleFormatter());
System.out.println(handler.getLevel()); // INFO
System.out.println(handler.getFormatter()); // java.util.logging.SimpleFormatter@84e9fc3
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("TEST LOG!");
handler.flush();
System.out.print(outputStream);
// 結果
// ↓
//3月 14, 2022 4:17:05 午後 com.example.logging.StreamHandlerTest$2 method
//情報: TEST LOG!
メソッド
void close ()
final var pattern = Path.of("R:", "java-work", "log.txt");
final StreamHandler handler = new FileHandler(pattern.toString());
handler.setFormatter(new SimpleFormatter());
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("BEFORE CLOSE LOG!");
System.out.println(Files.readString(pattern));
// 結果
// ↓
//3月 14, 2022 4:21:01 午後 com.example.logging.StreamHandlerTest$3 method
//情報: BEFORE CLOSE LOG!
handler.close();
logger.info("AFTER CLOSE LOG!");
System.out.println(Files.readString(pattern));
// 結果 (クローズ後のログは出力されません)
// ↓
//3月 14, 2022 4:21:01 午後 com.example.logging.StreamHandlerTest$3 method
//情報: BEFORE CLOSE LOG!
void flush ()
final var outputStream = new ByteArrayOutputStream();
final var handler = new StreamHandler(outputStream, new SimpleFormatter());
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("TEST LOG!");
System.out.println("-- before flush --");
System.out.println(outputStream);
handler.flush();
System.out.println("-- after flush --");
System.out.println(outputStream);
// 結果
// ↓
//-- before flush --
//
//-- after flush --
//3月 14, 2022 4:26:13 午後 com.example.logging.StreamHandlerTest$4 method
//情報: TEST LOG!
boolean isLoggable (LogRecord record)
final var handler = new StreamHandler(new ByteArrayOutputStream(), new SimpleFormatter());
System.out.println(handler.getLevel()); // INFO
final var ret1 = handler.isLoggable(new LogRecord(Level.WARNING, "WARNING!"));
System.out.println(ret1); // true
final var ret2 = handler.isLoggable(new LogRecord(Level.INFO, "INFO!"));
System.out.println(ret2); // true
final var ret3 = handler.isLoggable(new LogRecord(Level.FINE, "FINE!"));
System.out.println(ret3); // false
final var ret4 = handler.isLoggable(new LogRecord(Level.FINER, "FINER!"));
System.out.println(ret4); // false
final var handler = new StreamHandler(new ByteArrayOutputStream(), new SimpleFormatter());
final var logRecord = new LogRecord(Level.INFO, "TEST LOG!");
System.out.println(handler.isLoggable(logRecord)); // true
handler.close();
System.out.println(handler.isLoggable(logRecord)); // false
// ストリーム未設定
final var handler = new StreamHandler();
final var logRecord = new LogRecord(Level.INFO, "TEST LOG!");
System.out.println(handler.isLoggable(logRecord)); // false
void publish (LogRecord record)
final var outputStream = new ByteArrayOutputStream();
final var handler = new StreamHandler(outputStream, new SimpleFormatter()) {
@Override
public synchronized void publish(LogRecord logRecord) {
// 意図的にメッセージを加工します。
logRecord.setMessage(logRecord.getMessage() + ":override publish!");
super.publish(logRecord);
}
};
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.info("TEST LOG!");
handler.flush();
System.out.print(outputStream);
// 結果
// ↓
//3月 14, 2022 4:33:31 午後 com.example.logging.StreamHandlerTest$5 method
//情報: TEST LOG!:override publish!
void setEncoding (String encoding)
System.out.println(Charset.defaultCharset()); // UTF-8
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
final var outputStream = new ByteArrayOutputStream();
final var handler = new StreamHandler(outputStream, new SimpleFormatter());
System.out.println(handler.getEncoding()); // null
logger.addHandler(handler);
logger.info("TEST LOG : 〇△□×");
handler.flush();
// UTF-8用のコンソールへ出力する例です。
System.out.print(outputStream);
// 結果
// ↓
//3月 14, 2022 4:51:17 午後 com.example.logging.StreamHandlerTest$6 method
//情報: TEST LOG : 〇△□×
final var logger = Logger.getLogger("com.example.logging");
logger.setUseParentHandlers(false);
final var outputStream = new ByteArrayOutputStream();
final var handler = new StreamHandler(outputStream, new SimpleFormatter());
logger.addHandler(handler);
handler.setEncoding("Shift_JIS");
System.out.println(handler.getEncoding()); // Shift_JIS
logger.info("TEST LOG : 〇△□×");
handler.flush();
// UTF-8用のコンソールへ出力する例です。
System.out.print(outputStream);
// 結果 (SJIS用のコンソールではないので文字化けします)
// ↓
//3�� 14, 2022 4:50:17 �ߌ� 3�� 14, 2022 4:52:56 �ߌ� com.example.logging.StreamHandlerTest$7 method
//���: TEST LOG : �Z�����~
protected void setOutputStream (OutputStream out)
StreamHandler()の使用例に setOutputStream もまとめて記載しました。
API使用例はそちらをご参照ください。
Handlerで宣言されたメソッド
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, reportError, setErrorManager, setFilter, setFormatter, setLevel
「Java API 使用例 : Handler」をご参照ください。