技术中心
您现在的位置: 上海自动化仪表股份有限公司 > 技术中心
无纸记录仪的工作原理及基础知识
来源:上海自动化仪表有限公司作者:发表时间: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)方法上实现为调用。
上海自动化仪表有限公司推荐资讯
- 全面了解膜盒压力表故障排除的5个步骤及其2019-12-12
- 了解不同类型的万用表的基本功能2018-08-25
- 磁翻柱(板)液位计的技术资料及调整使用2017-12-12
- 重点解说关于涡轮流量计的操作理念、好处以2019-07-26
- 重点阐述关于转子流量计的一些有用事实2020-01-09
- 带热电偶温度变送器2018-03-10
- 压力传感器的定义、类型以及11个应用2019-07-16
- 上海自仪承接的CAP1400示范工程蒸汽发生器2025-03-27
上海自动化仪表有限公司热门产品
- D505/8D压力控制器2019-07-12
- 我公司上海自仪积极响应公司开展降本增效合2023-02-13
- 误区:阀门定位器应使用积分作用2019-02-16
- 温度相关密度变化对静水位测量的影响2018-05-22
- 影响电磁流量计天然气计量误差的主要因素2017-12-16
- 浮球液位开关测量值偏低时怎么处理2017-12-15
- 双支铠装热电阻2018-03-05
- 公司新型智能电表技术从开关电极测试多个参2017-12-27