- java.lang.Object
-
- java.util.logging.Handler
-
- java.util.logging.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类的名称(默认为noFilter)。 - <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()创建MemoryHandler并根据LogManager配置属性LogManager配置。MemoryHandler(Handler target, int size, Level pushLevel)创建一个MemoryHandler。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 voidclose()关闭Handler并释放所有相关资源。voidflush()导致目标Handler上的Handler。LevelgetPushLevel()获取pushLevel。booleanisLoggable(LogRecord record)检查此Handler是否实际将给定的LogRecord到其内部缓冲区中。voidpublish(LogRecord record)将LogRecord存储在内部缓冲区中。voidpush()将任何缓冲输出推送到目标Handler。voidsetPushLevel(Level newLevel)设置pushLevel。-
声明方法的类 java.util.logging.Handler
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, reportError, setEncoding, setErrorManager, setFilter, setFormatter, setLevel
-
-
-
-
构造方法详细信息
-
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。
-
push
public void push()
将任何缓冲的输出推送到目标Handler。然后清除缓冲区。
-
flush
public void flush()
导致目标Handler上的Handler。请注意,
MemoryHandler缓冲区的当前内容未写出。 这需要“推动”。
-
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- aLogRecord - 结果
-
如果将记录
LogRecordtrue。
-
-