Logger 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
Logger 物件可用來記錄特定系統或應用程式元件的訊息。
[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
- 繼承
- 屬性
備註
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 記錄器通常會使用階層式點分隔命名空間來命名。 記錄器名稱可以是任意字串,但通常應該以已記錄元件的套件名稱或類別名稱為基礎,例如 java.net 或 javax.swing。 此外,也可以建立「匿名」記錄器,而該記錄器不會儲存在Logger命名空間中。
記錄器物件可透過呼叫其中一個 getLogger Factory 方法來取得。 這些會建立新的記錄器,或傳回適當的現有記錄器。 請務必注意,如果不保留對記錄器的強式參考,其中一個 getLogger
處理站方法所傳回的Logger隨時可能會被垃圾收集。
記錄訊息會轉送至已註冊的 Handler 對象,這些物件可以將訊息轉送至各種目的地,包括控制台、檔案、OS 記錄等。
每個記錄器都會追蹤「父代」記錄器,這是記錄器命名空間中最接近的現有上階。
每個記錄器都有與其相關聯的「層級」。 這會反映此記錄器所關心的最低層級。 如果 Logger 的層級設定為 null
,則其有效層級會繼承自其父系,而該層級可能會以遞歸方式從其父系取得,依此遞歸方式從樹狀結構上取得。
記錄層級可以根據記錄組態檔中的屬性來設定,如LogManager類別的描述中所述。 不過,您也可以透過Logger.setLevel方法上的呼叫來動態變更。 如果記錄器層級變更,變更也會影響子記錄器,因為任何具有 null
其層級的子記錄器都會從其父代繼承其有效層級。
在每個記錄呼叫上,記錄器一開始會對記錄器的有效記錄層級執行要求層級的廉價檢查(例如,SEVERE 或 FINE)。 如果要求層級低於記錄層級,記錄呼叫會立即傳回。
通過此初始(廉價)測試之後,記錄器會配置LogRecord來描述記錄訊息。 然後,它會呼叫篩選條件(如果有的話),以對是否應該發佈記錄進行更詳細的檢查。 如果傳遞,則會將LogRecord發佈至其輸出處理程式。 根據預設,記錄器也會發佈至其父系的處理程式,以遞歸方式向上顯示樹狀結構。
每個記錄器可能都有 ResourceBundle
相關聯的 。 ResourceBundle
可以透過名稱、使用 #getLogger(java.lang.String, java.lang.String)
Factory 方法或值來指定 - 使用 #setResourceBundle(java.util.ResourceBundle) setResourceBundle
方法。 此套件組合將用於本地化記錄訊息。 如果 Logger 沒有自己的 ResourceBundle
或資源套件組合名稱,則會從其父系繼承 ResourceBundle
或資源套件組合名稱,以遞歸方式向上樹狀結構。
大部分的記錄器輸出方法都會採用 「msg」 自變數。 這個 msg 自變數可能是原始值或當地語系化索引鍵。 在格式化期間,如果記錄器有 (或繼承) 當地語系化 ResourceBundle
,而且 如果 ResourceBundle
具有 msg 字串的對應,則 msg 字串會取代為本地化的值。 否則會使用原始的 msg 字串。 一般而言,格式器會使用java.text.MessageFormat 樣式格式設定來格式化參數,例如格式字串 “{0}{1}” 會將兩個參數格式化為字串。
一組方法,或者採用 「msgSupplier」 而不是 「msg」 自變數。 這些方法會採用一個 Supplier
<String>
函式,只有在訊息實際根據有效記錄層級來記錄訊息時,才會叫用此函式來建構所需的記錄訊息,從而消除不必要的訊息建構。 例如,如果開發人員想要記錄系統健康情況狀態以進行診斷,使用 String-accepting 版本,程式代碼看起來會像這樣:
<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
Factory 方法指定資源套件組合名稱。 如果找不到ResourceBundle
或找不到任何資源套件組合名稱,則會使用繼承自其父樹狀結構的最ResourceBundle
接近或資源套件組合名稱。<br> 當 ResourceBundle
透過 #setResourceBundle(java.util.ResourceBundle) setResourceBundle
方法繼承或指定 時,將會使用。ResourceBundle
否則,如果記錄器只有或繼承資源套件組合名稱,則該資源套件組合名稱將會使用記錄時的預設 Locale 對應至 ResourceBundle
物件。 <br id=“ResourceBundleMapping”>將資源套件組合名稱對應至 ResourceBundle
物件時,記錄器會先嘗試使用 Thread 的 java.lang.Thread#getContextClassLoader() 內容類別載入器,將指定的資源套件組合名稱對應至 ResourceBundle
。 如果線程內容類別載入器是 null
,它會改為嘗試java.lang.ClassLoader#getSystemClassLoader() 系統類別載入器。 ResourceBundle
如果仍然找不到 ,它會使用 Factory 方法第一個呼叫端的#getLogger(java.lang.String, java.lang.String) getLogger
類別載入器。
格式設定(包括本地化)是輸出處理程式的責任,通常會呼叫 Formatter。
請注意,格式設定不需要同步發生。 它可能會延遲到 LogRecord 實際寫入外部接收為止。
記錄方法分為五個主要類別: <ul><li>
有一組「記錄」方法會採用記錄層級、訊息字串串,以及選擇性地對訊息字串使用某些參數。 <李>
有一組 「logp」方法(適用於「記錄精確」),就像「記錄檔」方法一樣,但也採用明確的來源類別名稱和方法名稱。 <李>
有一組 「logrb」 方法 (針對 “log with resource bundle” 的記錄檔),就像 “logp” 方法一樣,但也採用明確的資源配套物件來當地語系化記錄訊息。 <李>
追蹤方法專案有方便的方法(「輸入」方法)、方法傳回(「結束」方法)和擲回例外狀況(「擲回」方法)。 <李>
最後,有一組方便的方法可用於最簡單的案例,而開發人員只是想要在指定的記錄層級記錄簡單字串。 這些方法是以標準層級名稱 (“severe”、“warning”、“info” 等) 命名,並採用單一自變數訊息字串。 </ul>
對於未採用明確來源名稱和方法名稱的方法,記錄架構會「盡最大努力」判斷哪一個類別和方法會呼叫至記錄方法。 不過,請務必瞭解這個自動推斷的資訊可能只有近似值(甚至可能相當錯誤!)。 當 JITing 可能會完全移除堆疊框架時,允許虛擬機進行廣泛的優化,因此無法可靠地找出呼叫類別和方法。
記錄器上的所有方法都是多線程安全的方法。
<b>子類別資訊:</b> 請注意,LogManager 類別可能會針對命名空間中的任何點,提供自己名為Loggers的實作。 因此,Logger 的任何子類別(除非它們與新的 LogManager 類別一起實作),應該小心地從 LogManager 類別取得 Logger 實例,並且應該將 “isLoggable” 和 “log(LogRecord)” 之類的作業委派給該實例。 請注意,為了攔截所有記錄輸出,子類別只需要覆寫 log(LogRecord) 方法。 所有其他記錄方法都會實作為這個記錄檔(LogRecord) 方法的呼叫。
已在1.4中新增。
的 java.util.logging.Logger
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
Logger(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
Logger(String, String) |
受保護方法來建構具名子系統的記錄器。 |
欄位
GlobalLoggerName |
GLOBAL_LOGGER_NAME是全域記錄器的名稱。 |
屬性
AnonymousLogger |
建立匿名記錄器。 |
Class |
傳回這個 |
Filter |
取得此記錄器目前的篩選。 -或- 設定篩選以控制此記錄器上的輸出。 |
Global |
傳回名稱為Logger的全域記錄器物件。 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
JniPeerMembers |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 |
Level |
取得已為此記錄器指定的記錄層級。 -或- 設定記錄層級,指定此記錄器將記錄哪些訊息層級。 |
Name |
取得此記錄器的名稱。 |
Parent |
傳回這個記錄器的父代。 -或- 設定此記錄器的父代。 |
PeerReference |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
ResourceBundle |
擷取此記錄器的當地語系化資源配套。 -或- 設定此記錄器上的資源配套。 |
ResourceBundleName |
擷取此記錄器的當地語系化資源配套名稱。 |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
UseParentHandlers |
探索此記錄器是否要將輸出傳送至其父記錄器。 -或- 指定此記錄器是否應該將輸出傳送至其父記錄器。 |
方法
AddHandler(Handler) |
新增記錄處理程式以接收記錄訊息。 |
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
Config(ISupplier) |
記錄 CONFIG 訊息,只有在記錄層級如此才會實際記錄訊息時建構。 |
Config(String) |
記錄 CONFIG 訊息。 |
Dispose() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
Dispose(Boolean) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
Entering(String, String) |
記錄方法專案。 |
Entering(String, String, Object) |
使用一個參數記錄方法專案。 |
Entering(String, String, Object[]) |
使用參數陣列記錄方法專案。 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
Exiting(String, String) |
記錄方法傳回。 |
Exiting(String, String, Object) |
使用結果對象記錄方法傳回。 |
Fine(ISupplier) |
記錄 FINE 訊息,只有在記錄層級是讓訊息實際記錄時,才會建構此訊息。 |
Fine(String) |
記錄 FINE 訊息。 |
Finer(ISupplier) |
記錄 FINER 訊息,只有在記錄層級如此才會實際記錄訊息,才會建構此訊息。 |
Finer(String) |
記錄 FINER 訊息。 |
Finest(ISupplier) |
記錄 FINEST 訊息,只有在記錄層級是讓訊息實際記錄時,才會建構此訊息。 |
Finest(String) |
記錄 FINEST 訊息。 |
GetAnonymousLogger(String) |
建立匿名記錄器。 |
GetHandlers() |
取得與此記錄器相關聯的處理程式。 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
GetLogger(String) |
尋找或建立具名子系統的記錄器。 |
GetLogger(String, String) |
尋找或建立具名子系統的記錄器。 |
Info(ISupplier) |
記錄 INFO 訊息,只有在記錄層級如此才會實際記錄訊息,才會建構該訊息。 |
Info(String) |
記錄 INFO 訊息。 |
IsLoggable(Level) |
檢查指定層級的訊息是否實際上會由這個記錄器記錄。 |
JavaFinalize() |
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
Log(Level, ISupplier) |
記錄訊息,只有在記錄層級如此,才會建構訊息,以便實際記錄訊息。 |
Log(Level, String) |
記錄訊息,不含自變數。 |
Log(Level, String, Object) |
使用一個物件參數記錄訊息。 |
Log(Level, String, Object[]) |
使用物件自變數陣列來記錄訊息。 |
Log(Level, String, Throwable) |
記錄訊息,其中包含相關聯的可擲回資訊。 |
Log(Level, Throwable, ISupplier) |
記錄延遲建構的訊息,其中包含相關聯的可擲回資訊。 |
Log(LogRecord) |
記錄 LogRecord。 |
Logp(Level, String, String, ISupplier) |
記錄延遲建構的訊息,並指定沒有自變數的來源類別和方法。 |
Logp(Level, String, String, String) |
記錄訊息,指定來源類別和方法,不含自變數。 |
Logp(Level, String, String, String, Object) |
使用記錄訊息的單一物件參數來記錄訊息,並指定來源類別和方法。 |
Logp(Level, String, String, String, Object[]) |
使用物件自變數陣列來記錄訊息,並指定來源類別和方法。 |
Logp(Level, String, String, String, Throwable) |
使用相關聯的 Throwable 資訊來記錄訊息,並指定來源類別和方法。 |
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) |
記錄訊息,指定不含自變數的來源類別、方法和資源套件組合名稱。 |
Logrb(Level, String, String, String, String, Object) |
使用記錄訊息的單一物件參數來記錄訊息,並指定來源類別、方法和資源套件組合名稱。 |
Logrb(Level, String, String, String, String, Object[]) |
使用物件自變數陣列來記錄訊息,並指定來源類別、方法和資源組合名稱。 |
Logrb(Level, String, String, String, String, Throwable) |
記錄訊息,並指定來源類別、方法和資源套件組合名稱,以及相關聯的 Throwable 資訊。 |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
RemoveHandler(Handler) |
拿掉記錄處理程式。 |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
Severe(ISupplier) |
記錄嚴重性訊息,只有在記錄層級如此才會實際記錄訊息,才會建構此訊息。 |
Severe(String) |
記錄嚴重訊息。 |
Throwing(String, String, Throwable) |
記錄擲回例外狀況。 |
ToArray<T>() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Warning(ISupplier) |
記錄警告訊息,只有在記錄層級如此才會實際記錄訊息時建構。 |
Warning(String) |
記錄 WARNING 訊息。 |
明確介面實作
IJavaPeerable.Disposed() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 |
GetJniTypeName(IJavaPeerable) |
Logger 物件可用來記錄特定系統或應用程式元件的訊息。 |