技術中心
您現在的位置: 上海自動化儀表股份有限公司 > 技術中心
無紙記錄儀的工作原理及基礎知識
來源:上海自動化儀表有限公司作者:發表時間: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)方法上實現為調用。
上海自動化儀表有限公司推薦資訊
- 側裝型浮球液位計的原理及安裝須知2017-12-12
- 如何正確選擇食品和飲料應用行業的閥門2019-07-23
- 數字式過程驅動器都具有防滴漏功能提高分配2017-12-27
- 選購壓力變送器需全面考量的九點因素2018-05-17
- ZDR-35112電動偏心旋轉調節閥2018-04-04
- 淺析我廠生產的流量計附件2017-12-15
- 公司四十年的壓力傳感器回顧2018-01-04
- 詳細介紹偏心旋轉調節閥進行維護的一些好處2019-12-26
上海自動化儀表有限公司熱門產品
- 新加坡的質量流量計將如何改善行業2018-11-17
- 全面解說關于電磁流量計使用、設置和維護的2019-02-16
- 全面分析影響電磁流量計市場發展的六個因素2019-01-26
- 隔膜壓力表冬季的三個保溫措施2019-11-14
- 如何校準壓力變速器以及壓力變送器的用途是2018-07-26
- 靜態電阻應變儀故障的5個常見因素及其解決2019-10-24
- 正確維護實踐的重要性以及維護氣動調節閥32018-08-08
- QFA-23空氣安全閥2018-04-08