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”的输出日志

 

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