Module java.logging

Class MemoryHandler

java.lang.Object
java.util.logging.Handler
java.util.logging.MemoryHandler

public class MemoryHandler extends Handler
MemoryHandler是一个在内存中使用循环缓冲区缓冲请求的处理程序。

通常,这个Handler简单地将传入的LogRecords存储在其内存缓冲区中,并丢弃早期的记录。这种缓冲非常便宜,避免了格式化成本。在某些触发条件下,MemoryHandler将推送其当前缓冲区内容到目标Handler,后者通常会将它们发布到外部世界。

有三种主要模型触发缓冲区的推送:

  • 传入的LogRecord具有大于预定义级别pushLevel的类型。
  • 外部类显式调用push方法。
  • 子类覆盖log方法,扫描每个传入的LogRecord,如果记录符合某些期望的条件,则调用push

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

  • <handler-name>.level指定Handler的级别(默认为Level.ALL)。
  • <handler-name>.filter指定要使用的Filter类的名称(默认为无Filter)。
  • <handler-name>.size定义缓冲区大小(默认为1000)。
  • <handler-name>.push定义pushLevel(默认为level.SEVERE)。
  • <handler-name>.target指定目标Handler类的名称(无默认值)。

例如,MemoryHandler的属性将是:

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

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

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

    • MemoryHandler

      public MemoryHandler()
      创建一个MemoryHandler并根据LogManager配置属性进行配置。
    • MemoryHandler

      public MemoryHandler(Handler target, int size, Level pushLevel)
      创建一个MemoryHandler

      MemoryHandler根据LogManager属性(或其默认值)进行配置,除了使用给定的pushLevel参数和缓冲区大小参数。

      参数:
      target - 要发布输出的处理程序。
      size - 要缓冲的日志记录数(必须大于零)
      pushLevel - 要推送的消息级别
      抛出:
      IllegalArgumentException - 如果size is <= 0
  • Method Details

    • publish

      public void publish(LogRecord record)
      LogRecord存储在内部缓冲区中。

      如果存在Filter,将调用其isLoggable方法来检查给定的日志记录是否可记录。如果不可记录,则返回。否则,将给定记录复制到内部循环缓冲区中。然后,将记录的级别属性与pushLevel进行比较。如果给定级别大于或等于pushLevel,则将调用push以将所有缓冲记录写入目标输出Handler

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

      public void push()
      将任何缓冲输出推送到目标Handler

      然后清除缓冲区。

    • flush

      public void flush()
      在目标Handler上引发刷新。

      请注意,MemoryHandler缓冲区的当前内容不会被写出。这需要一个“推送”。

      指定者:
      flush 在类 Handler
    • close

      public void close() throws SecurityException
      关闭Handler并释放所有相关资源。这也将关闭目标Handler
      指定者:
      close 在类 Handler
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有LoggingPermission("control")
    • setPushLevel

      public void setPushLevel(Level newLevel) throws SecurityException
      设置pushLevel。在将LogRecord复制到我们的内部缓冲区后,如果其级别大于或等于pushLevel,则将调用push
      参数:
      newLevel - pushLevel的新值
      抛出:
      SecurityException - 如果存在安全管理器且调用者没有LoggingPermission("control")
    • getPushLevel

      public Level getPushLevel()
      获取pushLevel
      返回:
      pushLevel的值
    • isLoggable

      public boolean isLoggable(LogRecord record)
      检查此Handler是否实际将给定的LogRecord记录到其内部缓冲区中。

      此方法检查LogRecord是否具有适当的级别以及是否满足任何Filter。但它不会检查LogRecord是否会导致缓冲区内容的“推送”。如果LogRecord为null,则返回false。

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