Photon教程——使用log4net插件在Photon中打印log

使用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”的輸出日誌

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章