6-4 Log4Net In Photon Server
本章要來設定Photon Server的Log功能,如之前的文章中有向大家介紹如何觀看Log紀錄,今天要教大家如何在程式中使用Log4Net產生自己的紀錄,方便往後的Debug作業。
首先,專案必須引入兩個dll檔,ExitGames.Logging.Log4Net.dll與log4net.dll,如果有人不知道Photon提供的dll檔在哪,或是不知道該怎麼引入dll檔的話,請先看以前的文章唷。
6-2 Create A Photon Server Project And Import Library
引入完之後,我這邊直接從Photon提供的範例中,複製log4net的設定檔案,檔案位置在src-server/Mmo/Photon.MmoDemo.Server/log4net.config。
如下提供我的log4net.config內容:
修改完以後,在專案的log4net.config點右鍵選擇Properties。
修改Copy to output directory的設定為Always copy,每次Build專案時都會將此設定檔複製到輸出資料夾。
接著撰寫程式碼,以下提供我的主類別與MyClinetPeer.cs的程式碼:
NoliahFantasyServer.cs:
MyClientPeer.cs:
寫好以後按下Build/Build All,專案就會開始編譯了。
編譯完以後產生如下圖的資料,這些資料都需要複製到PhotonServer上交付執行。
上傳完畢,要給PhotonServer執行的程式都要在deploy底下,NoliahFantasy則是我自定義的Application名稱,然後統一放在bin的下面。
完成了以後還不能啟動,因為我們還沒有編輯PhotonServer.config檔案,由於設定檔的解說在前面的章節已詳細說明過了,不再贅述。下列提供我的設定原始碼:
修改完以後,開啟Photon的控制中心,就會發現Photon instances中多出了我們定義的NoliahFantasyServer選項,選擇Start as application。假如在啟動Application時出了問題,有可能是你的PhotonServer.config檔案設定錯誤,請再檢查是否有哪個值設定的不對。
此時來到deploy/bin_Win64/log底下,會出現我自定義的NoliahFantasy.Server檔案,當程式邏輯有Bug時便能透過這個檔案進行測試。另外,還有一個類似名稱的檔案Photon-NoliahFantasyServer-20180505,這是Photon預設的啟動Application時的Log檔,如果在啟動時就出現問題的話,請看這個Log。
最後,我們的Log裡面有出現“Setup Log4Net Completed!”字樣,代表成功了。
首先,專案必須引入兩個dll檔,ExitGames.Logging.Log4Net.dll與log4net.dll,如果有人不知道Photon提供的dll檔在哪,或是不知道該怎麼引入dll檔的話,請先看以前的文章唷。
6-2 Create A Photon Server Project And Import Library
引入完之後,我這邊直接從Photon提供的範例中,複製log4net的設定檔案,檔案位置在src-server/Mmo/Photon.MmoDemo.Server/log4net.config。
接著修改裡面的內容,主要是將Log的檔案名稱改成自己想要的名稱,在第五行的後面。
如下提供我的log4net.config內容:
修改完以後,在專案的log4net.config點右鍵選擇Properties。
修改Copy to output directory的設定為Always copy,每次Build專案時都會將此設定檔複製到輸出資料夾。
接著撰寫程式碼,以下提供我的主類別與MyClinetPeer.cs的程式碼:
NoliahFantasyServer.cs:
using System; using System.IO; using Photon.SocketServer; using ExitGames.Logging; using ExitGames.Logging.Log4Net; using log4net.Config; namespace NoliahFantasyServer { public class NoliahFantasyServer : ApplicationBase { private static readonly ILogger logger = LogManager.GetCurrentClassLogger(); public NoliahFantasyServer() { } // 當Client端發出Request的時候 protected override PeerBase CreatePeer(InitRequest initRequest) { return new MyClientPeer(initRequest); } // Server端啟動的時候初始化 protected override void Setup() { LoggerInit(); } // Server端關閉的時候 protected override void TearDown() { } void LoggerInit() { // 日誌初始化 log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(this.ApplicationRootPath, "bin_Win64", "log"); FileInfo loggerConfig = new FileInfo(Path.Combine(this.BinaryPath, "log4net.config")); if (loggerConfig.Exists) { // 設置使用log4net的Log功能 LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance); // 讓log4net讀取config XmlConfigurator.ConfigureAndWatch(loggerConfig); } logger.Info("Setup Log4Net Compeleted!"); } } }
MyClientPeer.cs:
using System; using Photon.SocketServer; using PhotonHostRuntimeInterfaces; namespace NoliahFantasyServer { public class MyClientPeer : ClientPeer { public MyClientPeer(InitRequest initRequest) : base(initRequest) { } // Client端斷開連結的時候 protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail) { } // 處理Client的Request請求 protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { } } }
寫好以後按下Build/Build All,專案就會開始編譯了。
編譯完以後產生如下圖的資料,這些資料都需要複製到PhotonServer上交付執行。
上傳完畢,要給PhotonServer執行的程式都要在deploy底下,NoliahFantasy則是我自定義的Application名稱,然後統一放在bin的下面。
完成了以後還不能啟動,因為我們還沒有編輯PhotonServer.config檔案,由於設定檔的解說在前面的章節已詳細說明過了,不再贅述。下列提供我的設定原始碼:
修改完以後,開啟Photon的控制中心,就會發現Photon instances中多出了我們定義的NoliahFantasyServer選項,選擇Start as application。假如在啟動Application時出了問題,有可能是你的PhotonServer.config檔案設定錯誤,請再檢查是否有哪個值設定的不對。
此時來到deploy/bin_Win64/log底下,會出現我自定義的NoliahFantasy.Server檔案,當程式邏輯有Bug時便能透過這個檔案進行測試。另外,還有一個類似名稱的檔案Photon-NoliahFantasyServer-20180505,這是Photon預設的啟動Application時的Log檔,如果在啟動時就出現問題的話,請看這個Log。
最後,我們的Log裡面有出現“Setup Log4Net Completed!”字樣,代表成功了。
想請問一下,我在建置之後沒有出現PhotonHostRuntimeInterfaces.dll,請問有可能是我哪個部分做錯嗎?還是說我也可以直接從當初參考的地方直接拿來用?
回覆刪除應該可以唷~我的Visual Studio可能自動幫我輸出PhotonHostRuntimeInterfaces.dll到目的資料夾。檔案應該都是同一個。
刪除