- 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
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
close()
关闭Handler
并释放所有相关资源。void
flush()
导致目标Handler
上的Handler
。Level
getPushLevel()
获取pushLevel
。boolean
isLoggable(LogRecord record)
检查此Handler
是否实际将给定的LogRecord
到其内部缓冲区中。void
publish(LogRecord record)
将LogRecord
存储在内部缓冲区中。void
push()
将任何缓冲输出推送到目标Handler
。void
setPushLevel(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
- 结果
-
如果将记录
LogRecord
true。
-
-