使用log4net插件在Photon中打印log
上一篇博文(Photon教程——建立簡單的Photon服務器(二))的地址:https://blog.csdn.net/ultramansail/article/details/102756441
插件的使用
一、導入插件
我們之前已經引用了ExitGames.logging.Log4Net.dll、log4net.dll文件,說一不必再提
二、定義一個簡單的用於輸出消息的類
1.新建一個Debug類,寫入以下代碼
using System;
using System.Collections.Generic;
using System.Text;
using ExitGames.Logging;
namespace GameServer
{
class Debug
{
//定義一個ILogger對象,用來輸出log
private static readonly ILogger log = LogManager.GetCurrentClassLogger();
//輸出消息
public static void Log(object message)
{
log.Info(message);
}
//輸出錯誤
public static void Error(object message)
{
log.Error(message);
}
//輸出警告
public static void Warn(object message)
{
log.Warn(message);
}
}
}
2.注意引入ExitGames.Logging命名空間,通過LogManager.GetCurrentClassLog()方法可以獲取Photon用於輸出的ILogger對象
三、在Game Server類中測試log
1.在GameServer中寫入以下代碼
using System;
using System.Collections.Generic;
using System.Text;
using Photon.SocketServer;
namespace GameServer
{
class GameServer : ApplicationBase
{
//當一個客戶端連接到服務器時調用
protected override PeerBase CreatePeer(InitRequest initRequest)
{
Debug.Log("有一個客戶端連接了服務器");
return new GamePeer(initRequest);
}
//當服務器初始化(移動成功)時調用
protected override void Setup()
{
Debug.Log("服務器初始化成功");
}
//當服務器關閉時調用
protected override void TearDown()
{
Debug.Log("服務器關閉");
}
}
}
2.複製“log4net.config”文件到GameServer的VS解決方案的目錄,或新建一個“log4net.config”文件,寫入以下代碼
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %-30.30c{2} %m% [%t]%n" />
</layout>
</appender>
<!-- "normal" log file appender -->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{Photon:ApplicationLogPath}\\GameServer.log" />
<encoding value="utf-8" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="1" />
<param name="MaximumFileSize" value="250MB" />
<param name="RollingStyle" value="Size" />
<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<!-- logger -->
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
<!-- operation data logger -->
<!-- set level to DEBUG to enable operation data logging-->
<logger name="OperationData">
<level value="INFO" />
</logger>
<!-- override log level for certain classes / namespaces -->
<!-- set to DEBUG to enable logging for the Photon.SocketServer namespace -->
<logger name="ExitGames">
<level value="INFO" />
</logger>
<!-- set to DEBUG to enable logging for the Photon.SocketServer namespace -->
<logger name="Photon.SocketServer">
<level value="INFO" />
</logger>
<!-- add more "logger" elements for further classes / namespaces here -->
<logger name="Photon.LoadBalancing.MasterServer.Lobby.LobbyStatsPublisher">
<level value="INFO" />
</logger>
<logger name="Photon.Common.LoadBalancer.LoadShedding">
<level value="INFO" />
</logger>
</log4net>
放入VS解決方案目錄中注意把文件的“<file type="log4net.Util.PatternString" value="”後面改成“"%property{Photon:ApplicationLogPath}\\GameServer.log" />”(附件中已經改好)
3.把“log4net.config”的“複製到輸出路徑”屬性改爲“始終複製”
4.在Debug類中寫入如下方法
public static void InitLog()
{
//設置log輸出的文件目錄
log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(Path.Combine(GameServer.Instance.ApplicationRootPath, "bin_Win64"), "log");
//導入配置文件,告訴ILogger對象"log4net.config"配置文件的目錄
FileInfo fileInfo = new FileInfo(Path.Combine(GameServer.Instance.BinaryPath, "log4net.config"));
//如果更改配置文件存在
if (fileInfo.Exists)
{
//告訴Photon我們將使用log4net插件輸出log
LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
//讓log4net插件讀取"log4net.config"配置文件
XmlConfigurator.Configure(fileInfo);
}
}
注意命名空間的引用
using ExitGames.Logging;
using System.IO;
using ExitGames.Logging.Log4Net;
using log4net.Config;
5.在GameServer中寫入如下代碼
using System;
using System.Collections.Generic;
using System.Text;
using Photon.SocketServer;
namespace GameServer
{
class GameServer : ApplicationBase
{
//當一個客戶端連接到服務器時調用
protected override PeerBase CreatePeer(InitRequest initRequest)
{
Debug.Log("有一個客戶端連接了服務端");
return new GamePeer(initRequest);
}
//當服務器初始化(移動成功)時調用
protected override void Setup()
{
Debug.InitLog();
Debug.Log("服務端應用初始化成功");
}
//當服務器關閉時調用
protected override void TearDown()
{
Debug.Log("服務端應用關閉");
}
}
}
6.生成解決方案,把生成的文件複製到“Photon根目錄/depoly/GameServer”(以後這個步驟都直接稱“生成解決方案”
7.我們發現“Photon根目錄/deploy/bin_Win64/log”中出現了“GameServer.log”文件
8.我們也可以右擊後臺圖標,點擊“Open Logs”,找到“GameServer.log”的輸出日誌