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