模块  java.logging
软件包  java.util.logging

Class MemoryHandler


  • public class MemoryHandler
    extends Handler
    Handler缓冲内存中循环缓冲区中的请求。

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

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

    • 传入LogRecord的类型大于预定义级别pushLevel
    • 外部类显式调用push方法。
    • 子类重写log方法并扫描每个传入的LogRecord ,如果记录符合某些所需条件,则调用push

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

    • <处理程序名> .LEVEL指定了水平Handler (默认为Level.ALL )。
    • <handler-name> .filter指定要使用的Filter类的名称(默认为no 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
    从以下版本开始:
    1.4
    • 构造方法详细信息

      • MemoryHandler

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

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

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

        参数
        target - 要将输出发布到的处理程序。
        size - 要缓冲的日志记录数(必须大于零)
        pushLevel - 要继续的消息级别
        异常
        IllegalArgumentException - 如果 size is <= 0
    • 方法详细信息

      • publish

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

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

        Specified by:
        publish在类 Handler
        参数
        record - 日志事件的描述。 静默忽略空记录,不会发布
      • push

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

        然后清除缓冲区。

      • flush

        public void flush()
        导致目标Handler上的Handler

        请注意, MemoryHandler缓冲区的当前内容写出。 这需要“推动”。

        Specified by:
        flush在类 Handler
      • close

        public void close()
                   throws SecurityException
        关闭Handler并释放所有相关资源。 这也将关闭目标Handler
        Specified by:
        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为空,它将返回false。

        重写:
        isLoggable在类 Handler
        参数
        record - a LogRecord
        结果
        如果将记录 LogRecord true。