跳至主要内容

LoggingLauncher

重要 注意 提醒

Coding Style wiki


LoggingLauncherLoggingSystem 的日誌部署啟動器 (MonoBehaviour 單例),負責日誌器的初始與載入配置文件 (StreamingAssets),並提供全域 (Master) 與個別日誌器的動態配置 API;可透過 Samples 匯入 LoggingLauncher Prefab 拖曳至場景激活 (僅需激活一次)。

命名空間OxGKit.LoggingSystem
類型public class LoggingLauncher : MonoBehaviour
原始碼LoggingLauncher.cs
using OxGKit.LoggingSystem;

注意 標註 [StartCoroutine] 的方法為包裝協程的便捷呼叫;各方法皆有對應的 [Async] 版本 (IEnumerator),可自行以協程等待完成時機。

快速上手

using OxGKit.LoggingSystem;

// 場景上已放置 LoggingLauncher Prefab (Initialize On Awake)
// -> 會自動 InitLoggers + 加載 StreamingAssets 配置文件

// 動態配置單一日誌器
LoggingLauncher.ConfigureLogger("Game.Logger", true, LogLevel.LogWarning | LogLevel.LogError);

// 全域開關
LoggingLauncher.ToggleMasterLogging(false);

// 自定義配置 (動態配置日誌器)
var loggersConfig = new LoggersConfig
(
new LoggerSettings("Game.Logger", true, LogLevel.All)
);
LoggingLauncher.SetLoggersConfig(loggersConfig);

通用規則

初始流程

  1. Initialize On Awake (預設):LoggingLauncher 於 Awake 自動執行 InitLoggers (反射收集所有 Logging 實作) 並嘗試加載 StreamingAssets 配置文件。
  2. 手動初始 (HybridCLR):取消 Inspector 上的 "Initialize On Awake" 選項,自行呼叫 CreateLogger 逐一註冊,最後呼叫 TryLoadLoggers 套用配置。

重要 搭配 HybridCLR 有主工程跟熱更工程的區分時,必須手動拆分創建 AOTHotfix 的 Loggers 初始流程 (Hotfix 工程的 Loggers 需在 Hotfix 工程中初始)。

配置生效條件

重要 僅於 UNITY_EDITOR 或已定義 OXGKIT_LOGGER_ON 宏時,才會進行日誌器載入與輸出,否則會提示 Not enabled LoggingSystem by symbol [OXGKIT_LOGGER_ON]


成員

成員說明
public bool initLoggersOnAwake是否於 Awake 自動初始 (Inspector: Initialize On Awake),搭配 HybridCLR 手動初始時需取消。
public LoggersConfig loggersConfig當前的日誌器配置數據 (LoggersConfig)。
public static ConfigFileType currentConfigFileType當前配置文件類型 (Json / Bytes),預設 Bytes

日誌器管理

方法總覽

方法說明
InitLoggers反射收集並初始所有日誌器。
ClearLoggers清除所有已註冊日誌器。
CreateLogger手動註冊單一日誌器 (HybridCLR 流程)。
TryInitLoggers初始所有日誌器並加載配置文件。
TryLoadLoggers依配置文件重載日誌器設定。

InitLoggers

public static void InitLoggers()

以反射收集所有 Logging 實作類並建立實例 (含 LoggerName 的名稱與覆寫處理)。

ClearLoggers

public static void ClearLoggers()

清除所有已註冊的日誌器緩存。

CreateLogger

public static void CreateLogger<TLogging>() where TLogging : Logging, new()

手動註冊單一日誌器,用於 HybridCLR 手動拆分 AOT / Hotfix 初始流程 (避免反射收集不到熱更工程的類型)。

// HybridCLR (必須取消 LoggingLauncher 上的 "Initialize On Awake" 選項):
LoggingLauncher.CreateLogger<LoggingDemoLogger1>();
LoggingLauncher.CreateLogger<LoggingDemoLogger2>();
LoggingLauncher.TryLoadLoggers();

TryInitLoggers

// [StartCoroutine]
public static void TryInitLoggers()

// [Async]
public static IEnumerator TryInitLoggersAsync()

初始所有日誌器 (InitLoggers) 並加載 StreamingAssets 配置文件套用設定 (等同 Awake 自動初始流程)。

TryLoadLoggers

// [StartCoroutine]
public static void TryLoadLoggers()

// [Async]
public static IEnumerator TryLoadLoggersAsync()

依配置文件重載日誌器設定;新增或移除 Logger 後皆需呼叫此方法進行重載


全域配置 (Master)

方法總覽

方法說明
ToggleMasterLogging全域開關 (啟用/停用所有日誌器)。
LevelMasterLogging設置全域日誌級別。
ColorMasterLogging設置全域日誌顏色模式。

ToggleMasterLogging

// [StartCoroutine]
public static void ToggleMasterLogging(bool logMainActive)

// [Async]
public static IEnumerator ToggleMasterLoggingAsync(bool logMainActive)

切換全域開關 (Master Logging Toggle),關閉時所有日誌器皆不輸出。

LevelMasterLogging

// [StartCoroutine]
public static void LevelMasterLogging(LogLevel logMainLevel)

// [Async]
public static IEnumerator LevelMasterLoggingAsync(LogLevel logMainLevel)

設置全域級別 (Master Logging Level),與個別級別取交集後生效 (詳見級別規則表)。

ColorMasterLogging

// [StartCoroutine]
public static void ColorMasterLogging(LogColor logMainColor)

// [Async]
public static IEnumerator ColorMasterLoggingAsync(LogColor logMainColor)

設置全域顏色模式 (Master Logging Color),與個別顏色模式取較嚴格者生效 (詳見顏色規則表)。


個別配置

方法總覽

方法說明
ConfigureLogger配置指定日誌器的開關/級別/顏色。
ConfigureAllLoggers一次配置所有日誌器的開關/級別/顏色。
SetLoggersConfig以自定義 LoggersConfig 覆蓋當前配置並重載。

ConfigureLogger

// [StartCoroutine]
public static void ConfigureLogger(string loggerName, bool logActive, LogLevel logLevel = LogLevel.All, LogColor logColor = LogColor.EditorOnly)

// [Async]
public static IEnumerator ConfigureLoggerAsync(string loggerName, bool logActive, LogLevel logLevel = LogLevel.All, LogColor logColor = LogColor.EditorOnly)

配置指定名稱日誌器的開關、級別與顏色模式,配置後自動重載。

LoggingLauncher.ConfigureLogger("Game.Logger", true, LogLevel.LogWarning | LogLevel.LogError);

ConfigureAllLoggers

// [StartCoroutine]
public static void ConfigureAllLoggers(bool logActive, LogLevel logLevel = LogLevel.All, LogColor logColor = LogColor.EditorOnly)

// [Async]
public static IEnumerator ConfigureAllLoggersAsync(bool logActive, LogLevel logLevel = LogLevel.All, LogColor logColor = LogColor.EditorOnly)

一次配置所有日誌器的開關、級別與顏色模式,配置後自動重載。

SetLoggersConfig

// [StartCoroutine]
public static void SetLoggersConfig(LoggersConfig loggersConfig)

// [Async]
public static IEnumerator SetLoggersConfigAsync(LoggersConfig loggersConfig)

自定義的 LoggersConfig 覆蓋當前配置並重載 (動態配置日誌器)。

var loggersConfig = new LoggersConfig
(
new LoggerSettings("LoggingDemo.Logger1", true, LogLevel.LogDebug),
new LoggerSettings("LoggingDemo.Logger2", true, LogLevel.LogWarning),
new LoggerSettings("LoggingDemo.Logger3", true, LogLevel.Off)
);
LoggingLauncher.SetLoggersConfig(loggersConfig);

配置重載

方法總覽

方法說明
ReloadLoggersConfig(實例) 重新初始日誌器並同步配置清單。
ReloadFromLoggersConfig(實例) 從配置文件重新載入配置。
ResetLoggersConfig(實例) 清空配置並重建。
ReloadLoggersConfigAndSet同步配置清單與當前日誌器實作 (新增/移除比對)。

ReloadLoggersConfig

// [StartCoroutine]
public void ReloadLoggersConfig(Action<LoggersConfig> result = null)

// [Async]
public IEnumerator ReloadLoggersConfigAsync(Action<LoggersConfig> result = null)

(實例方法) 重新初始日誌器並同步配置清單,完成後透過 result 回傳當前配置。

ReloadFromLoggersConfig

// [StartCoroutine]
public void ReloadFromLoggersConfig(Action<LoggersConfig> result = null)

// [Async]
public IEnumerator ReloadFromLoggersConfigAsync(Action<LoggersConfig> result = null)

(實例方法) 從 StreamingAssets 配置文件重新載入配置。

ResetLoggersConfig

// [StartCoroutine]
public void ResetLoggersConfig(Action<LoggersConfig> result = null)

// [Async]
public IEnumerator ResetLoggersConfigAsync(Action<LoggersConfig> result = null)

(實例方法) 清空當前配置並以預設值重建。

ReloadLoggersConfigAndSet

public static void ReloadLoggersConfigAndSet(LoggersConfig loggersConfig, Action<LoggersConfig> result)

將傳入的配置清單與當前已註冊日誌器實作進行比對同步 (自動補上新日誌器、移除不存在的日誌器),完成後透過 result 回傳。