您好,上海自动化仪表自仪销售网欢迎您!

官方微信|联系我们|

上自仪微信

上海自动化仪表股份有限公司,上海自动化仪表有限公司

上海自动化仪表自仪销售网热线:

021-56413113021-56725115

您是否在找: 上海自动化仪表厂膜片压力表|上海自动化仪表厂不锈钢压力表|
上海自动化仪表四厂简介

无纸记录仪的工作原理及基础知识

来源:上海自动化仪表有限公司作者:发表时间:2017-12-13 10:04:17

 无纸记录仪的工作原理及基础知识

    无纸记录仪对象用于记录特定系统或应用程序组件的消息。无纸记录仪通常使用分层点分隔的命名空间命名。无纸记录仪名称可以是任意字符串,但通常应该基于记录组件的包名称或类名称,例如java.net或javax.swing。此外,还可以创建没有存储在记录器名称空间中的“匿名”记录器。
    无纸记录仪对象可以通过调用其中一个getLogger工厂方法来获得。这些将创建一个新的记录器或返回一个合适的现有无纸记录仪。需要注意的是,如果没有保存对Logger的强引用,任何时候getLogger工厂方法返回的Logger都可能被垃圾回收。
    无纸记录仪消息将被转发到注册的处理程序对象,它可以将消息转发到各种目标,包括控制台,文件,操作系统日志等。
    每个无纸记录仪都会跟踪“父”记录器,它是Logger命名空间中最近的现有祖先。
    每个记录器都有一个与其关联的“级别”。这反映了这个记录器关心的最低水平。如果Logger的级别设置为null,则其有效级别从其父级继承,而后者又可以从其父级以递归方式获得,依此类推。
    日志级别可以根据日志配置文件中的属性进行配置,如LogManager类的描述中所述。但是也可以通过Logger.setLevel方法的调用动态更改。如果记录器的级别发生更改,则更改也可能会影响子级记录器,因为任何级别为空的子级记录器都将从其父级继承其有效级别。
    在每次记录调用时,记录器最初对无纸记录仪的有效日志级别执行请求级别的便宜检查(例如,SEVERE或FINE)。如果请求级别低于日志级别,则日志记录调用立即返回。
    在通过这个初始的(便宜的)测试之后,无纸记录仪将分配一个LogRecord来描述记录消息。然后它会调用一个过滤器(如果存在)来更详细地检查记录是否应该发布。如果通过它将发布到其输出处理程序。默认情况下,无纸记录仪也会发布到其父处理程序,递归地向上。
    每个无纸记录仪可能有一个与其关联的ResourceBundle名称。命名包将用于本地化日志消息。如果无纸记录仪没有自己的ResourceBundle名称,那么它将从其父文件继承ResourceBundle名称,递归到树上。
    大部分无纸记录仪输出方法都带有“msg”参数。此msg参数可能是原始值或本地化密钥。在格式化期间,如果无纸记录仪具有(或继承)本地化ResourceBundle,并且ResourceBundle具有msg字符串的映射,则msg字符串将由本地化值替换。否则使用原始的msg字符串。通常情况下,格式化程序使用java.text.MessageFormat样式格式来格式化参数,例如格式字符串“{0} {1}”会将两个参数格式化为字符串。
    将ResourceBundle名称映射到ResourceBundles时,Logger将首先尝试使用Thread的ContextClassLoader。如果是null,它将尝试SystemClassLoader。作为初始实现中的一个临时转换功能,如果Logger无法从ContextClassLoader或SystemClassLoader中定位ResourceBundle,则Logger将搜索类堆栈,并使用连续调用的ClassLoaders尝试定位ResourceBundle。 (此调用堆栈搜索允许容器转换为使用ContextClassLoaders,并可能在未来的版本中被删除。)
    格式化(包括本地化)是输出处理程序的责任,通常会调用格式化程序。
    请注意,格式不需要同步发生。它可能会延迟,直到一个LogRecord实际写入到一个外部接收器。
日志方法分为五个主要类别:
(1)有一组“日志”方法将日志级别,消息字符串和可选的一些参数作为消息字符串。
(2)有一组“logp”方法(对于“log精确”),就像“log”方法一样,但也需要一个明确的源类名和方法名。
(3)有一套类似“logp”方法的“logrb”方法(对于“log with resource bundle”),但是也需要一个明确的资源包名来用于本地化日志消息。
(4)有跟踪方法条目(“进入”方法),方法返回(“退出”方法)和抛出异常(“抛出”方法)的便利方法。
(5)最后,在最简单的情况下,有一套简便的方法,当开发人员只需要在给定的日志级别上记录一个简单的字符串时。这些方法以标准级别名称(“严重”,“警告”,“信息”等)命名,并采用一个参数即消息字符串。
    对于不采用显式源名称和方法名称的方法,Logging框架将“尽最大努力”确定将哪个类和方法调用到日志记录方法中。但是,意识到这个自动推断的信息可能只是近似的(甚至可能是相当错误的!)。允许虚拟机在JITing时进行广泛的优化,并可能完全删除堆栈帧,从而无法可靠地定位调用类和方法。记录器上的所有方法都是多线程安全的。
    子类化信息:请注意,LogManager类可以为命名空间中的任何点提供自己的命名记录器实现。因此,Logger的任何子类(除非它们与一个新的LogManager类一起实现)应该注意从LogManager类获取一个Logger实例,并且应该将诸如“isLoggable”和“log(LogRecord)”等操作委托给该实例。注意为了拦截所有的日志输出,子类只需要重写log(LogRecord)方法。所有其他日志记录方法在此日志(LogRecord)方法上实现为调用。
 
 
相关产品推荐: 磁翻板液位计 分体式电磁流量计金属管浮子流量计智能雷达液位计智能差压变送器