改造 Unity3D 的 Logger

  • 551
  • 0

如題

在Unity3D中,基本的Log使用方式是使用Debug.Log()。

這個方式可以快速的在Unity編輯器的Console視窗看到寫入的 log 訊息,

不過如果訊息一多就很難快速看到想看的訊息,

之前寫asp.net的經驗,使用 Microsoft.Extensions.Logging 來建立一個 Logger 的框架,就可以利用框架的特性來過濾 Log 訊息,

如此一來,就可以用設定的方式來呈現自己想要看的訊息。

要做到這件事,首先需要把 Log 的 dll 放進 Unity 中,這個可以使用 https://dotblogs.com.tw/fphoenix/2019/05/05/222220 之前整理的方式來辦到,

要讓Unity原生的Logger可以整合到Microsoft.Extensions.Logging中需要實作兩個Type,一個是ILogger,另一個是ILoggerProvider,

實作程式碼如下,

UnityConsoleLogger:

UnityConsoleLoggerProvider:

接下來寫段測試程式看看,

結果成功呈現在Console視窗上,

但是對訊息點擊後程式跑到的位置不對…

雖然對 Unity 的 Log 設計有點疑問,對於他的Log點擊後可以到script所在的位置這點,覺得對於程式除錯很有用,

想要既有Microsoft.Extensions.Logging的好處,又不想失去這個優點。

觀察了Unity架構後發現,Console視窗能夠在點擊後到程式碼所在位置的條件是程式是在Unity內的script,

這樣的話,或許把 Logger 編譯成 dll 就可以達成目的,

改成 dll 後測試,達成目的!