无纸记录仪的工作原理及基础知识
无纸记录仪对象用于记录特定系统或应用程序组件的消息。无纸记录仪通常使用分层点分隔的命名空间命名。无纸记录仪名称可以是任意字符串,但通常应该基于记录组件的包名称或类名称,例如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)方法上实现为调用。
磁性浮子液位计 磁翻板液位计 蒸汽孔板流量计、 热电偶、 分体式电磁流量计、
上一篇: 上海华东传感器技术多次挽救生命
上海调压自动化设备推荐资讯
- 电动执行器的六个重要特征确保其适用于工业领域 2022-03-09
- 新设计中的电动执行器为农业应用带来了便利 2022-03-09
- 公司为您提供无纸记录仪等多种环境监测设备 2022-03-09
- 阀门所需的控制水平对工厂性能至关重要 2022-03-09
- 电动执行器具有明显的效率和长期成本节约等优势 2022-03-09
- 传感器和控制装置是现代阀门执行机构所需的基本要求 2022-03-09
- 节流电动执行机构在节流系统应用中的成本影响 2022-03-09
- 如何有效地使用万用表测量以获得准确的读数和提高工作效率 2022-03-09
- 在数字万用表(DMM)、欧姆表、电流表和电压表之间进行选择 2022-03-09
- 密封技术设计理念和经验基础 2022-03-09