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
ConstructorsConstructorDescription创建一个MemoryHandler并根据LogManager配置属性进行配置。MemoryHandler(Handler target, int size, Level pushLevel) 创建一个MemoryHandler。 -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()关闭Handler并释放所有相关资源。voidflush()导致目标Handler上的刷新。获取pushLevel。booleanisLoggable(LogRecord record) 检查此Handler是否实际将给定的LogRecord记录到其内部缓冲区中。void将LogRecord存储在内部缓冲区中。voidpush()将任何缓冲输出推送到目标Handler。voidsetPushLevel(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。
-