- 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
。
配置:默认情况下,每个
MemoryHandler
都使用以下LogManager
配置属性进行初始化,其中<handler-name>
引用处理程序的完全限定类名。 如果未定义属性(或具有无效值),则使用指定的默认值。 如果未定义默认值,则抛出RuntimeException。- <处理程序名> .LEVEL指定了水平
Handler
(默认为Level.ALL
)。 - <处理程序名> .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
- 从以下版本开始:
- 1.4
- 传入的
-
-
构造方法摘要
构造方法 Constructor 描述 MemoryHandler()
创建一个MemoryHandler
并配置它基于LogManager
配置属性。MemoryHandler(Handler target, int size, Level pushLevel)
创建一个MemoryHandler
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
close()
关闭Handler
并释放所有相关资源。void
flush()
导致目标Handler
。Level
getPushLevel()
获取pushLevel
。boolean
isLoggable(LogRecord record)
检查这个Handler
是否会将给定的LogRecord
实际记录到其内部缓冲区中。void
publish(LogRecord record)
将LogRecord
存储在内部缓冲区中。void
push()
将任何缓冲输出推送到目标Handler
。void
setPushLevel(Level newLevel)
设置pushLevel
。-
Methods inherited from class java.util.logging.Handler
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, reportError, setEncoding, setErrorManager, setFilter, setFormatter, setLevel
-
-
-
-
构造方法详细信息
-
MemoryHandler
public MemoryHandler()
创建一个MemoryHandler
并配置它基于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
。请注意,
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
为null,它将返回false。- 重写:
-
isLoggable
在Handler
- 参数
-
record
- aLogRecord
- 结果
-
如果要记录
LogRecord
true。
-
-