技術中心
您現(xiàn)在的位置: 上海自動化儀表股份有限公司 > 技術中心
無紙記錄儀的工作原理及基礎知識
來源:上海自動化儀表有限公司作者:發(fā)表時間:2017-12-13 10:04:17【小中大】
無紙記錄儀的工作原理及基礎知識
無紙記錄儀對象用于記錄特定系統(tǒng)或應用程序組件的消息。無紙記錄儀通常使用分層點分隔的命名空間命名。無紙記錄儀名稱可以是任意字符串,但通常應該基于記錄組件的包名稱或類名稱,例如java.net或javax.swing。此外,還可以創(chuàng)建沒有存儲在記錄器名稱空間中的“匿名”記錄器。
無紙記錄儀對象可以通過調用其中一個getLogger工廠方法來獲得。這些將創(chuàng)建一個新的記錄器或返回一個合適的現(xiàn)有無紙記錄儀。需要注意的是,如果沒有保存對Logger的強引用,任何時候getLogger工廠方法返回的Logger都可能被垃圾回收。
無紙記錄儀消息將被轉發(fā)到注冊的處理程序對象,它可以將消息轉發(fā)到各種目標,包括控制臺,文件,操作系統(tǒng)日志等。
每個無紙記錄儀都會跟蹤“父”記錄器,它是Logger命名空間中最近的現(xiàn)有祖先。
每個記錄器都有一個與其關聯(lián)的“級別”。這反映了這個記錄器關心的最低水平。如果Logger的級別設置為null,則其有效級別從其父級繼承,而后者又可以從其父級以遞歸方式獲得,依此類推。
日志級別可以根據(jù)日志配置文件中的屬性進行配置,如LogManager類的描述中所述。但是也可以通過Logger.setLevel方法的調用動態(tài)更改。如果記錄器的級別發(fā)生更改,則更改也可能會影響子級記錄器,因為任何級別為空的子級記錄器都將從其父級繼承其有效級別。
在每次記錄調用時,記錄器最初對無紙記錄儀的有效日志級別執(zhí)行請求級別的便宜檢查(例如,SEVERE或FINE)。如果請求級別低于日志級別,則日志記錄調用立即返回。
在通過這個初始的(便宜的)測試之后,無紙記錄儀將分配一個LogRecord來描述記錄消息。然后它會調用一個過濾器(如果存在)來更詳細地檢查記錄是否應該發(fā)布。如果通過它將發(fā)布到其輸出處理程序。默認情況下,無紙記錄儀也會發(fā)布到其父處理程序,遞歸地向上。
每個無紙記錄儀可能有一個與其關聯(lián)的ResourceBundle名稱。命名包將用于本地化日志消息。如果無紙記錄儀沒有自己的ResourceBundle名稱,那么它將從其父文件繼承ResourceBundle名稱,遞歸到樹上。
大部分無紙記錄儀輸出方法都帶有“msg”參數(shù)。此msg參數(shù)可能是原始值或本地化密鑰。在格式化期間,如果無紙記錄儀具有(或繼承)本地化ResourceBundle,并且ResourceBundle具有msg字符串的映射,則msg字符串將由本地化值替換。否則使用原始的msg字符串。通常情況下,格式化程序使用java.text.MessageFormat樣式格式來格式化參數(shù),例如格式字符串“{0} {1}”會將兩個參數(shù)格式化為字符串。
將ResourceBundle名稱映射到ResourceBundles時,Logger將首先嘗試使用Thread的ContextClassLoader。如果是null,它將嘗試SystemClassLoader。作為初始實現(xiàn)中的一個臨時轉換功能,如果Logger無法從ContextClassLoader或SystemClassLoader中定位ResourceBundle,則Logger將搜索類堆棧,并使用連續(xù)調用的ClassLoaders嘗試定位ResourceBundle。 (此調用堆棧搜索允許容器轉換為使用ContextClassLoaders,并可能在未來的版本中被刪除。)
格式化(包括本地化)是輸出處理程序的責任,通常會調用格式化程序。
請注意,格式不需要同步發(fā)生。它可能會延遲,直到一個LogRecord實際寫入到一個外部接收器。
日志方法分為五個主要類別:
(1)有一組“日志”方法將日志級別,消息字符串和可選的一些參數(shù)作為消息字符串。
(2)有一組“logp”方法(對于“log精確”),就像“log”方法一樣,但也需要一個明確的源類名和方法名。
(3)有一套類似“logp”方法的“logrb”方法(對于“log with resource bundle”),但是也需要一個明確的資源包名來用于本地化日志消息。
(4)有跟蹤方法條目(“進入”方法),方法返回(“退出”方法)和拋出異常(“拋出”方法)的便利方法。
(5)最后,在最簡單的情況下,有一套簡便的方法,當開發(fā)人員只需要在給定的日志級別上記錄一個簡單的字符串時。這些方法以標準級別名稱(“嚴重”,“警告”,“信息”等)命名,并采用一個參數(shù)即消息字符串。
對于不采用顯式源名稱和方法名稱的方法,Logging框架將“盡最大努力”確定將哪個類和方法調用到日志記錄方法中。但是,意識到這個自動推斷的信息可能只是近似的(甚至可能是相當錯誤的!)。允許虛擬機在JITing時進行廣泛的優(yōu)化,并可能完全刪除堆棧幀,從而無法可靠地定位調用類和方法。記錄器上的所有方法都是多線程安全的。
子類化信息:請注意,LogManager類可以為命名空間中的任何點提供自己的命名記錄器實現(xiàn)。因此,Logger的任何子類(除非它們與一個新的LogManager類一起實現(xiàn))應該注意從LogManager類獲取一個Logger實例,并且應該將諸如“isLoggable”和“log(LogRecord)”等操作委托給該實例。注意為了攔截所有的日志輸出,子類只需要重寫log(LogRecord)方法。所有其他日志記錄方法在此日志(LogRecord)方法上實現(xiàn)為調用。
上海自動化儀表有限公司推薦資訊
- 全面了解膜盒壓力表故障排除的5個步驟及其2019-12-12
- 了解不同類型的萬用表的基本功能2018-08-25
- 磁翻柱(板)液位計的技術資料及調整使用2017-12-12
- 重點解說關于渦輪流量計的操作理念、好處以2019-07-26
- 重點闡述關于轉子流量計的一些有用事實2020-01-09
- 帶熱電偶溫度變送器2018-03-10
- 壓力傳感器的定義、類型以及11個應用2019-07-16
- 上海自儀承接的CAP1400示范工程蒸汽發(fā)生器2025-03-27
上海自動化儀表有限公司熱門產品
- D505/8D壓力控制器2019-07-12
- 我公司上海自儀積極響應公司開展降本增效合2023-02-13
- 誤區(qū):閥門定位器應使用積分作用2019-02-16
- 溫度相關密度變化對靜水位測量的影響2018-05-22
- 影響電磁流量計天然氣計量誤差的主要因素2017-12-16
- 浮球液位開關測量值偏低時怎么處理2017-12-15
- 雙支鎧裝熱電阻2018-03-05
- 公司新型智能電表技術從開關電極測試多個參2017-12-27