java.lang.Object
java.util.logging.Handler
java.util.logging.MemoryHandler
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 Summary
ConstructorDescription创建一个MemoryHandler
并根据LogManager
配置属性进行配置。MemoryHandler
(Handler target, int size, Level pushLevel) 创建一个MemoryHandler
。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
关闭Handler
并释放所有相关资源。void
flush()
导致目标Handler
上的刷新。获取pushLevel
。boolean
isLoggable
(LogRecord record) 检查此Handler
是否实际将给定的LogRecord
记录到其内部缓冲区中。void
将LogRecord
存储在内部缓冲区中。void
push()
将任何缓冲输出推送到目标Handler
。void
setPushLevel
(Level newLevel) 设置pushLevel
。Methods declared in class java.util.logging.Handler
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, reportError, setEncoding, setErrorManager, setFilter, setFormatter, setLevel
-
Constructor Details
-
MemoryHandler
public MemoryHandler()创建一个MemoryHandler
并根据LogManager
配置属性进行配置。 -
MemoryHandler
创建一个MemoryHandler
。MemoryHandler
根据LogManager
属性(或其默认值)进行配置,除了使用给定的pushLevel
参数和缓冲区大小参数。- 参数:
-
target
- 要发布输出的处理程序。 -
size
- 要缓冲的日志记录数(必须大于零) -
pushLevel
- 要推送的消息级别 - 抛出:
-
IllegalArgumentException
- 如果size is <= 0
-
-
Method Details
-
publish
将LogRecord
存储在内部缓冲区中。如果存在
Filter
,将调用其isLoggable
方法来检查给定的日志记录是否可记录。如果不可记录,则返回。否则,将给定记录复制到内部循环缓冲区中。然后,将记录的级别属性与pushLevel
进行比较。如果给定级别大于或等于pushLevel
,则将调用push
以将所有缓冲记录写入目标输出Handler
。 -
push
public void push()将任何缓冲输出推送到目标Handler
。然后清除缓冲区。
-
flush
public void flush()在目标Handler
上引发刷新。请注意,
MemoryHandler
缓冲区的当前内容不会被写出。这需要一个“推送”。 -
close
关闭Handler
并释放所有相关资源。这也将关闭目标Handler
。- 指定者:
-
close
在类Handler
中 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用者没有LoggingPermission("control")
。
-
setPushLevel
设置pushLevel
。在将LogRecord
复制到我们的内部缓冲区后,如果其级别大于或等于pushLevel
,则将调用push
。- 参数:
-
newLevel
-pushLevel
的新值 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用者没有LoggingPermission("control")
。
-
getPushLevel
获取pushLevel
。- 返回:
-
pushLevel
的值
-
isLoggable
检查此Handler
是否实际将给定的LogRecord
记录到其内部缓冲区中。此方法检查
LogRecord
是否具有适当的级别以及是否满足任何Filter
。但它不会检查LogRecord
是否会导致缓冲区内容的“推送”。如果LogRecord
为null,则返回false。- 覆盖:
-
isLoggable
在类Handler
中 - 参数:
-
record
- 一个LogRecord
(可能为null)。 - 返回:
-
如果
LogRecord
将被记录,则为true。
-