Logger 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
記錄器物件用於記錄特定系統或應用程式元件的訊息。
[Android.Runtime.Register("java/util/logging/Logger", DoNotGenerateAcw=true)]
public class Logger : Java.Lang.Object
[<Android.Runtime.Register("java/util/logging/Logger", DoNotGenerateAcw=true)>]
type Logger = class
inherit Object
- 繼承
- 屬性
備註
記錄器物件用於記錄特定系統或應用程式元件的訊息。 記錄器通常以階層式點分隔命名空間命名。 記錄器名稱可以是任意字串,但通常應該基於被記錄元件的套件名稱或類別名稱,例如 java.net 或 javax.swing。 此外,也可以建立不儲存在 Logger 命名空間中的「匿名」記錄器。
Logger 物件可透過呼叫 getLogger 工廠方法之一取得。 這些會產生新的伐木器,或是退回合適的現有伐木器。 值得注意的是,若未強烈標示該記錄器,工廠方法退回 getLogger 的記錄器隨時可能被垃圾回收。
日誌訊息會轉發到註冊的處理程序物件,這些處理者物件可以將訊息轉發到各種目的地,包括主控台、檔案、作業系統日誌等。
每個 Logger 都會追蹤一個「父」Logger,即其在 Logger 命名空間中最近的現有祖先。
每個伐木機都有一個「等級」。 這反映了這位伐木者關心的最低等級。 若 Logger 的層級設為 null,則其有效層級會繼承自父節點,父節點可遞迴從父節點取得,依此類推。
日誌層級可根據日誌設定檔的屬性進行配置,如 LogManager 類別的描述所述。 不過,它也可能透過 Logger.setLevel 方法的呼叫動態改變。 如果記錄器的等級被更改,這項變更也可能影響子記錄器,因為任何等級為 的 null 子記錄器都會繼承其父節點的有效等級。
在每次日誌呼叫中,記錄器最初會對請求等級(例如嚴重或FINE)與日誌器的有效日誌等級進行廉價檢查。 若請求層級低於日誌層級,日誌呼叫會立即返回。
通過此初步(廉價)測試後,記錄器會分配一個 LogRecord 來描述日誌訊息。 接著會呼叫一個過濾器(如果有),以更詳細地檢查該紀錄是否應該被發布。 若通過,則會將 LogRecord 發佈給輸出處理器。 預設情況下,記錄器也會向其父的處理器發佈,遞迴地往上方發佈。
每位伐木工可能都與 ResourceBundle 之相關聯。 可 ResourceBundle 透過工廠方法以名稱 #getLogger(java.lang.String, java.lang.String) 指定,或以該方法以數值 #setResourceBundle(java.util.ResourceBundle) setResourceBundle 指定。 此套件將用於本地化日誌訊息。 如果 Logger 沒有自己的 ResourceBundle resource bundle 名稱,則會從父節點繼承 ResourceBundle or resource bundle 名稱,遞迴地往上方傳。
大多數記錄器輸出方法會接受「msg」參數。 這個訊息參數可以是原始值或本地化鍵。 在格式化過程中,如果記錄器有(或繼承)了本地化 ResourceBundle ,且 ResourceBundle 有 msg 字串的映射,則 msg 字串會被本地化值取代。 否則則使用原始的 msg 字串。 通常,格式化器會使用 java.text.MessageFormat 風格的格式化參數,例如格式字串「{0}{1}」會將兩個參數格式化為字串。
一組方法則可選擇「msgSupplier」而非「msg」參數。 這些方法採用 Supplier<String> 一個函數,只有在訊息實際要根據有效日誌層級進行記錄時才會被調用來構造所需的日誌訊息,從而消除不必要的訊息建構。 例如,若開發者想記錄系統健康狀態以供診斷,採用接受字串的版本,程式碼會呈現如下:
<code>
class DiagnosisMessages {
static String systemHealthStatus() {
// collect system health information
...
}
}
...
logger.log(Level.FINER, DiagnosisMessages.systemHealthStatus());
</code>
使用上述代碼時,即使關閉了日誌等級的 FINER,健康狀態仍被不必要地收集。 以下為接受供應商的版本,只有啟用日誌層級 FINER 時,狀態才會被收集。
<code>
logger.log(Level.FINER, DiagnosisMessages::systemHealthStatus);
</code>
尋找 時 ResourceBundle,記錄器會先查看資源包是否以 #setResourceBundle(java.util.ResourceBundle) setResourceBundle來指定,然後只判斷資源包名稱是否透過 #getLogger(java.lang.String, java.lang.String) getLogger 工廠方法指定。 若找不到 ResourceBundle 或沒有資源組合名稱,則會使用繼承自父樹的最近 ResourceBundle 資源組合名稱。<br> 當 a ResourceBundle 是透過該方法繼承或指定 #setResourceBundle(java.util.ResourceBundle) setResourceBundle 時,才會使用該 ResourceBundle 方法。 否則,如果記錄器只有或繼承了一個資源包名稱,那麼該資源包名稱會被映射到 ResourceBundle 物件上,並使用記錄時的預設 Locale。
<br id=“ResourceBundleMapping”>當將資源包名稱映射到 ResourceBundle 物件時,記錄器會先嘗試使用執行緒的java.lang.Thread#getContextClassLoader() 上下文類別載入器,將給定的資源組合名稱映射到 ResourceBundle。 如果執行緒上下文類別載入器是 null,它會嘗試 java.lang.ClassLoader#getSystemClassLoader() 系統類別載入器。 如果仍找不到, ResourceBundle 則會使用工廠方法第一個呼叫者的 #getLogger(java.lang.String, java.lang.String) getLogger 類別載入器。
格式化(包括本地化)由輸出處理器負責,通常會呼叫格式處理程序。
請注意,格式化不必同步進行。 可能會延遲,直到 LogRecord 實際寫入外部匯。
伐木方法分為五大類: <ul><li>
有一組「log」方法會接收一個 log 層級、訊息字串,並可選擇性地加入訊息字串的參數。 <李>
有一組「logp」(代表「log precise」)的方法,類似「log」方法,但也帶有明確的原始碼類別名稱和方法名稱。 <李>
有一組「logrb」(代表「log with resource bundle」)方法類似「logp」方法,但也使用明確的資源包物件來本地化日誌訊息。 <李>
有方便方法用於追蹤方法條目(「輸入」方法)、方法返回(「退出」方法)及拋出異常(「拋出」方法)。 <李>
最後,在最簡單的情況下,有一套方便的方法,例如開發者只是想在特定日誌層級記錄一個簡單的字串。 這些方法以標準等級名稱命名(如「嚴重」、「警告」、「資訊」等),並接受單一參數,即訊息字串。 </ul>
對於未明確設定原始碼名稱與方法名稱的方法,Logging 框架會盡力判斷被呼叫到日誌方法的類別與方法。 然而,重要的是要意識到,這些自動推斷的資訊可能只是近似值(甚至可能完全錯誤!)。 虛擬機在 JIT 時可進行大量優化,甚至可能完全移除堆疊框架,導致無法可靠定位呼叫類別與方法。
Logger 上的所有方法都對多執行緒安全。
<b>子類別資訊:</b> 請注意,LogManager 類別可為命名空間中任一點提供其自身的命名日誌實作。 因此,任何 Logger 子類別(除非與新的 LogManager 類別共同實作)都應謹慎從 LogManager 類別取得 Logger 實例,並將「isLoggable」和「log(LogRecord)」等操作委派給該實例。 請注意,為了攔截所有日誌輸出,子類別只需覆寫 log(LogRecord) 方法即可。 其他所有日誌方法皆以 log(LogRecord) 方法的呼叫方式實作。
在 1.4 版本加入。
Java 文件 java.util.logging.Logger。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| Logger(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
| Logger(String, String) |
保護方法用於為命名子系統建構記錄器。 |
欄位
| 名稱 | Description |
|---|---|
| GlobalLoggerName |
GLOBAL_LOGGER_NAME 是全球伐木機的名稱。 |
屬性
| 名稱 | Description |
|---|---|
| AnonymousLogger |
建立一個匿名的記錄者。 |
| Class |
回傳此 |
| Filter |
取得這個記錄器的現行過濾器。 -或- 設定濾波器控制這個記錄器的輸出。 |
| Global |
回傳全域 Logger 物件,名稱為 Logger。 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| JniPeerMembers |
取得用於調用此 Java 節點成員的 JNI 元資料。 |
| Level |
取得該記錄器指定的原木等級。 -或- 設定日誌層級,指定該日誌器將記錄哪些訊息層級。 |
| Name |
查這個伐木機的名字。 |
| Parent |
把這台Logger的母機退回去。 -或者- 設定這個Logger的父。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ResourceBundle |
取得此記錄器的本地化資源包。 -或- 在這個記錄器上設定資源組合。 |
| ResourceBundleName |
取得此記錄器的在地化資源組合名稱。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| UseParentHandlers |
確認這個記錄器是否將輸出傳送到其父記錄器。 -或- 指定此記錄器是否應該將輸出傳送給其父記錄器。 |
方法
| 名稱 | Description |
|---|---|
| AddHandler(Handler) |
新增日誌處理器以接收日誌訊息。 |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Config(ISupplier) |
記錄一個 CONFIG 訊息,只有在日誌層級足夠讓該訊息真正被記錄時才會被建構。 |
| Config(String) |
記錄一個 CONFIG 訊息。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| Entering(String, String, Object) |
記錄一個方法條目,只有一個參數。 |
| Entering(String, String, Object[]) |
記錄一個方法條目,並附上一組參數陣列。 |
| Entering(String, String) |
記錄一個方法條目。 |
| Equals(Object) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| Exiting(String, String, Object) |
記錄一個方法回傳,並帶有結果物件。 |
| Exiting(String, String) |
記錄方法回傳。 |
| Fine(ISupplier) |
記錄一個 FINE 訊息,只有在日誌層級足夠讓該訊息實際被記錄時才會被建構。 |
| Fine(String) |
記錄一個FINE訊息。 |
| Finer(ISupplier) |
記錄一個 FINER 訊息,只有在日誌層級足以讓訊息實際被記錄時才會被建構。 |
| Finer(String) |
記錄一個FINER訊息。 |
| Finest(ISupplier) |
記錄一個 FINEST 訊息,只有當日誌層級足以讓該訊息實際被記錄時,才會被建構。 |
| Finest(String) |
記錄一則最優秀的訊息。 |
| GetAnonymousLogger(String) |
建立一個匿名的記錄者。 |
| GetHandlers() |
找來和這個伐木機有關的處理者。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetLogger(String, String) |
尋找或建立一個命名子系統的記錄器。 |
| GetLogger(String) |
尋找或建立一個命名子系統的記錄器。 |
| Info(ISupplier) |
記錄一個 INFO 訊息,只有當日誌層級足夠讓該訊息真正被記錄時,才會被建構。 |
| Info(String) |
記錄一個 INFO 訊息。 |
| IsLoggable(Level) |
檢查該記錄器是否真的會記錄該等級的訊息。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Log(Level, ISupplier) |
記錄訊息,只有當日誌層級足夠讓訊息實際被記錄時,才會被建構。 |
| Log(Level, String, Object) |
記錄一個訊息,並設定一個物件參數。 |
| Log(Level, String, Object[]) |
記錄一個訊息,並用一組物件參數陣列。 |
| Log(Level, String, Throwable) |
記錄訊息,並附上可投擲資訊。 |
| Log(Level, String) |
記錄訊息,不要有任何爭議。 |
| Log(Level, Throwable, ISupplier) |
記錄一個懶散設計的訊息,並附帶可投擲資訊。 |
| Log(LogRecord) |
記錄一個 LogRecord。 |
| Logp(Level, String, String, ISupplier) |
記錄一個懶散構造的訊息,指定原始碼類別和方法,且不加參數。 |
| Logp(Level, String, String, String, Object) |
用單一物件參數記錄訊息,指定原始碼類別與方法。 |
| Logp(Level, String, String, String, Object[]) |
記錄一則訊息,指定原始碼類別和方法,並附上物件參數陣列。 |
| Logp(Level, String, String, String, Throwable) |
記錄一個訊息,指定來源類別與方法,並附上相關的 Throwable 資訊。 |
| Logp(Level, String, String, String) |
記錄一則訊息,指定原始碼類別和方法,且不設參數。 |
| Logp(Level, String, String, Throwable, ISupplier) |
記錄一個懶散構建的訊息,指定來源類別與方法,並附帶相應的 Throwable 資訊。 |
| Logrb(Level, String, String, ResourceBundle, String, Object[]) |
記錄包含來源類別、來源方法、資源套件及可選訊息參數的訊息。 |
| Logrb(Level, String, String, ResourceBundle, String, Throwable) |
記錄訊息,指定原始碼類別、方法與資源包,並附帶可投擲資訊。 |
| Logrb(Level, String, String, String, String, Object) |
記錄一個訊息,指定來源類別、方法和資源包名稱,並以單一物件參數來記錄日誌訊息。 |
| Logrb(Level, String, String, String, String, Object[]) |
記錄訊息,指定原始碼類別、方法和資源包名稱,並附上物件參數陣列。 |
| Logrb(Level, String, String, String, String, Throwable) |
記錄訊息,指定原始碼類別、方法及資源包名稱,並附上可拋棄資訊。 |
| Logrb(Level, String, String, String, String) |
記錄訊息,指定原始碼類別、方法和資源包名稱,且不包含參數。 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| RemoveHandler(Handler) |
移除一個原木處理器。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| Severe(ISupplier) |
記錄一個 SEVERE 訊息,只有當日誌層級足夠讓訊息實際被記錄時,才會建立該訊息。 |
| Severe(String) |
記錄一個嚴重訊息。 |
| Throwing(String, String, Throwable) |
Log 拋棄例外。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Warning(ISupplier) |
記錄一個 WARNING 訊息,只有當日誌層級足夠讓該訊息實際被記錄時,才會建立這個訊息。 |
| Warning(String) |
請記錄警告訊息。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
記錄器物件用於記錄特定系統或應用程式元件的訊息。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |