Module java.logging

Class StreamHandler

java.lang.Object
java.util.logging.Handler
java.util.logging.StreamHandler
直接已知的子类:
ConsoleHandler, FileHandler, SocketHandler

public class StreamHandler extends Handler
基于流的日志记录 Handler

主要用作实现其他日志 Handler 时的基类或支持类。

LogRecords 被发布到给定的 java.io.OutputStream

配置: 默认情况下,每个 StreamHandler 都使用以下 LogManager 配置属性进行初始化,其中 <handler-name> 指的是处理程序的完全限定类名。如果未定义属性(或具有无效值),则使用指定的默认值。

  • <handler-name>.level 指定 Handler 的默认级别(默认为 Level.INFO)。
  • <handler-name>.filter 指定要使用的 Filter 类的名称(默认为无 Filter)。
  • <handler-name>.formatter 指定要使用的 Formatter 类的名称(默认为 java.util.logging.SimpleFormatter)。
  • <handler-name>.encoding 要使用的字符集编码的名称(默认为默认平台编码)。

例如,StreamHandler 的属性将是:

  • java.util.logging.StreamHandler.level=INFO
  • java.util.logging.StreamHandler.formatter=java.util.logging.SimpleFormatter

对于自定义处理程序,例如 com.foo.MyHandler,属性将是:

  • com.foo.MyHandler.level=INFO
  • com.foo.MyHandler.formatter=java.util.logging.SimpleFormatter
自 JDK 版本:
1.4
  • Constructor Details

    • StreamHandler

      public StreamHandler()
      创建一个没有当前输出流的 StreamHandler
    • StreamHandler

      public StreamHandler(OutputStream out, Formatter formatter)
      创建一个具有给定 Formatter 和输出流的 StreamHandler
      参数:
      out - 目标输出流
      formatter - 用于格式化输出的格式化程序
  • Method Details

    • setOutputStream

      protected void setOutputStream(OutputStream out) throws SecurityException
      更改输出流。

      如果存在当前输出流,则会写入 Formatter 的尾部字符串,然后刷新和关闭流。然后用新的输出流替换输出流。

      参数:
      out - 新的输出流。不得为 null。
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 LoggingPermission("control")
    • setEncoding

      public void setEncoding(String encoding) throws SecurityException, UnsupportedEncodingException
      设置(或更改)此 Handler 使用的字符编码。

      应在写入任何 LogRecordsHandler 之前设置编码。

      覆盖:
      setEncoding 在类 Handler
      参数:
      encoding - 支持的字符编码的名称。可能为 null,表示默认平台编码。
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 LoggingPermission("control")
      UnsupportedEncodingException - 如果不支持指定的编码。
    • publish

      public void publish(LogRecord record)
      格式化并发布一个 LogRecord

      StreamHandler 首先检查是否有 OutputStream,以及给定的 LogRecord 是否至少具有所需的日志级别。如果没有,则会静默返回。如果有,则调用任何关联的 Filter 来检查是否应发布记录。如果是,则调用其 Formatter 来格式化记录,然后将结果写入当前输出流。

      如果这是要写入给定 OutputStream 的第一个 LogRecord,则会在写入 LogRecord 之前将 Formatter 的“head”字符串写入流。

      指定者:
      publish 在类 Handler
      参数:
      record - 日志事件的描述。空记录会被静默忽略并不会被发布
    • isLoggable

      public boolean isLoggable(LogRecord record)
      检查此 Handler 是否实际记录给定的 LogRecord

      此方法检查 LogRecord 是否具有适当的级别以及是否满足任何 Filter。如果尚未分配输出流或 LogRecord 为 null,则还将返回 false。

      覆盖:
      isLoggable 在类 Handler
      参数:
      record - 一个 LogRecord(可能为 null)。
      返回:
      如果将记录 LogRecord,则为 true。
    • flush

      public void flush()
      刷新任何缓冲的消息。
      指定者:
      flush 在类 Handler
    • close

      public void close() throws SecurityException
      关闭当前输出流。

      在关闭流之前,将 Formatter 的“tail”字符串写入流。此外,如果尚未将 Formatter 的“head”字符串写入流,则会在“tail”字符串之前写入。

      指定者:
      close 在类 Handler
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有 LoggingPermission("control")。