跳至主要内容

Logging

重要 注意 提醒

Coding Style wiki


LoggingLoggingSystem 的日誌器抽象基類,繼承此類即可實作自定義日誌器,並透過泛型靜態方法 (Print<TLogging> 系列) 以指定日誌器輸出各級別日誌;輸出時會依全域與個別的級別/顏色規則過濾與上色。

命名空間OxGKit.LoggingSystem
類型public abstract class Logging : ILogging
原始碼Logging.cs
using OxGKit.LoggingSystem;

注意 日誌器需先經由 LoggingLauncher 初始 (TryInitLoggersCreateLogger + 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 取較嚴格者生效。


靜態輸出方法

方法說明
Print輸出 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 上色格式化 (未啟用上色時原樣返回)。