Logging
Coding Style wiki
Logging 是 LoggingSystem 的日誌器抽象基類,繼承此類即可實作自定義日誌器,並透過泛型靜態方法 (Print<TLogging> 系列) 以指定日誌器輸出各級別日誌;輸出時會依全域與個別的級別/顏色規則過濾與上色。
| 命名空間 | OxGKit.LoggingSystem |
| 類型 | public abstract class Logging : ILogging |
| 原始碼 | Logging.cs |
using OxGKit.LoggingSystem;
注意 日誌器需先經由 LoggingLauncher 初始 (TryInitLoggers 或 CreateLogger + TryLoadLoggers),泛型輸出才會生效;發布 (Build) 時需加入 OXGKIT_LOGGER_ON 宏。
快速上手
using OxGKit.LoggingSystem;
// 1. 實作自定義日誌器 (使用 [LoggerName] 自定義名稱)
[LoggerName("Game.Logger")]
public class GameLogger : Logging
{
// If use HybridCLR must create a default constructor
public GameLogger() { }
}
// 2. 透過泛型靜態方法輸出日誌 (以日誌器類型指定輸出者)
Logging.Print<GameLogger>("Debug message");
Logging.PrintInfo<GameLogger>("Info message");
Logging.PrintWarning<GameLogger>("Warning message");
Logging.PrintError<GameLogger>("Error message");
Logging.PrintException<GameLogger>(new System.Exception("Exception message"));
通用規則
日誌器名稱
日誌器以名稱作為唯一識別,預設為類型名稱 (Type Name),可透過 LoggerNameAttribute 自定義名稱;配置文件 (LoggersConfig) 即以此名稱對應各日誌器的開關/級別/顏色設定。
覆寫日誌器 (Override)
以 [LoggerName("相同名稱", true)] 標記新的日誌器類,初始時會取代原有同名日誌器,可用於覆寫輸出行為 (如轉送至檔案、遠端收集器等)。
[LoggerName("Game.Logger", true)]
public class OverrideGameLogger : Logging
{
public OverrideGameLogger() { }
public override void Log(object message)
{
UnityEngine.Debug.Log("[Override] " + message);
}
}
輸出過濾與上色
每次輸出會依序檢查:全域開關/級別 (Master) → 個別開關/級別 (Per-Logger),兩者皆允許該級別才會輸出 (詳見級別規則表);上色模式由全域與個別 LogColor 取較嚴格者生效。
靜態輸出方法
方法總覽
| 方法 | 說明 |
|---|---|
輸出 Debug 級別日誌 (對應 Log)。 | |
| PrintInfo | 輸出 Info 級別日誌 (對應 LogInfo)。 |
| PrintWarning | 輸出 Warning 級別日誌 (對應 LogWarning)。 |
| PrintError | 輸出 Error 級別日誌 (對應 LogError)。 |
| PrintException | 輸出 Exception 級別日誌 (對應 LogException)。 |
提醒 各方法皆可傳入 UnityEngine.Object context,點擊 Console 日誌時會高亮該物件 (與 Debug.Log(message, context) 行為相同)。
Print
public static void Print<TLogging>(object message, UnityEngine.Object context = null) where TLogging : Logging
以 TLogging 指定的日誌器輸出 LogDebug 級別日誌。
Logging.Print<GameLogger>("Hello OxGKit");
Logging.Print<GameLogger>("With context", this.gameObject);
PrintInfo
public static void PrintInfo<TLogging>(object message, UnityEngine.Object context = null) where TLogging : Logging
以 TLogging 指定的日誌器輸出 LogInfo 級別日誌。
PrintWarning
public static void PrintWarning<TLogging>(object message, UnityEngine.Object context = null) where TLogging : Logging
以 TLogging 指定的日誌器輸出 LogWarning 級別日誌。
PrintError
public static void PrintError<TLogging>(object message, UnityEngine.Object context = null) where TLogging : Logging
以 TLogging 指定的日誌器輸出 LogError 級別日誌。
PrintException
public static void PrintException<TLogging>(Exception exception, UnityEngine.Object context = null) where TLogging : Logging
以 TLogging 指定的日誌器輸出 LogException 級別日誌。
可覆寫方法 (virtual)
繼承 Logging 後可覆寫以下輸出行為,預設實作為 UnityEngine.Debug 對應方法:
| 方法 | 預 設實作 |
|---|---|
public virtual void Log(object message) | Debug.Log |
public virtual void LogInfo(object message) | Debug.Log |
public virtual void LogWarning(object message) | Debug.LogWarning |
public virtual void LogError(object message) | Debug.LogError |
public virtual void LogException(Exception exception) | Debug.LogException |
public virtual void Log(object message, UnityEngine.Object context) | Debug.Log |
public virtual void LogInfo(object message, UnityEngine.Object context) | Debug.Log |
public virtual void LogWarning(object message, UnityEngine.Object context) | Debug.LogWarning |
public virtual void LogError(object message, UnityEngine.Object context) | Debug.LogError |
public virtual void LogException(Exception exception, UnityEngine.Object context) | Debug.LogException |
輔助方法
CheckLogActive
public bool CheckLogActive(LogLevel logLevel)
檢查該日誌器於指定級別是否允許輸出 (全域與個別規則交集判斷)。
ShouldColorize
public bool ShouldColorize()
檢查該日誌器當前是否啟用 RichText 上色 (全域與個別 LogColor 取較嚴格者,Editor 下 EditorOnly 視為啟用)。
ColorizeLogMessage
public object ColorizeLogMessage(LogLevel logLevel, object message)
依級別對訊息進行 RichText 上色格式化 (未啟用上色時原樣返回)。