在上一篇搭建服务器端的项目基础上,使用log4Net进行调试信息输出

http://www.cnblogs.com/fzxiaoyi/p/8439769.html

1.先分析下Photo 自带的服务器端源代码

打开文件夹src-server  C:\Program Files\Photon Server\src-server

这几个文件夹都是服务器端一些源代码,打开任意一个工程查看下别的项目是如何输出调试

这里以Lite项目为例,打开Lite项目

字体加粗的这个MyApplication是启动项目,也可以通过右键解决方案->属性查看启动项目

双击打开MyApplication.CS

F12进入基类LiteApplication

这个类跟我们写的服务器端类一模一样,也是继承之ApplicationBase, 重写了三个抽象方法

很明显红框部份就是我们需要填加的代码..最后使用log.infoFormat输出调试信息.

项目还添加了个lgo4net.config 配置文件

2.开始实现使用log4Net输出调试信息的功能

 using ExitGames.Logging;
using ExitGames.Logging.Log4Net;
using log4net.Config;
using Photon.SocketServer;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ChatServer
{
//继承自ApplicationBase的类是server的入口程序
class ChatServer : ApplicationBase
{
private static readonly ILogger log = LogManager.GetCurrentClassLogger();
//当有新的客户连接到这个server时被自动调用
protected override PeerBase CreatePeer(InitRequest initRequest)
{
//每次被调用就创建一个继承自PeerBase类的对象用于跟客户端通信
return new ChatPeer(initRequest.Protocol, initRequest.PhotonPeer);
}
//当server启动时被调用
protected override void Setup()
{
log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(this.ApplicationRootPath, "log"); // log4net
string path = Path.Combine(this.BinaryPath, "log4net.config");
var file = new FileInfo(path);
if (file.Exists)
{
LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
XmlConfigurator.ConfigureAndWatch(file);
} log.Info("Server Setup"); }
//当server停止时被调用
protected override void TearDown()
{
log.Info("Server TearDown");
}
}
}

再把Lite项目中的lgo4net.config 复制一份到我们工程目录下,添加lgo4net.config到项目中.

打开lgo4net.config做下修改,默认输出的是Lite.log, 搜索Lite全部替换成我们的项目名称

ChatServer, 注意要去掉全字匹配,保存.

在lgo4net.config右键属性,复制到输出目录 改为 始终复制.

保存下项目,最终生成解决方案, 运行PhotonControl.exe

选择ChatServer->Start as application 启动应用

打开日志进行查看  Open Logs

ChatServer.log 就是我们生成的普通日志,服务器启动时输出了一句Server Setup

默认所有服务器端日志都保存在C:\Program Files\Photon Server\deploy\log\

使用log4Net输出调试信息的更多相关文章

  1. js操作dom---创建一个域来输出调试信息

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. 在MFC中,使用控制台Console输出调试信息

    1.在MFC的应用类的InitInstance()函数里添加: AllocConsole(); 有时候需要调整这行代码在InitInstance函数的位置 2.继续添加以下代码 freopen(&qu ...

  3. 使用OutputDebugString输出调试信息

    在编写控制台程序的时候我们经常会使用printf输出调试信息,使我们了解程序的状态,方便调试,但是当编写非控制台程序的时候这种方法就行不通了,那我们应该怎么办?上网查了一些方法,大致就如下几种 使用L ...

  4. shell输出调试信息

    [shell输出调试信息] 1.使用trap命令 trap命令用于捕获指定的信号并执行预定义的命令. 其基本的语法是: trap 'command' signal 其中signal是要捕获的信号,co ...

  5. Delphi中使用Dos窗口输出调试信息

    在项目文件 *.DPR (Project->View Source)  里加上{$APPTYPE   CONSOLE} 然后,在需要输出处加上 Writeln(‘your debug messa ...

  6. 【OT1.0 + TP3.2】开启trace调试、输出调试信息、开启自定义菜单

    1.开启trace调试 A- 后台系统设置 show-page-trace = 1 B-config.php文件.配置 show-page-trace = true 2.输出调试信息 很奇怪,OT竟然 ...

  7. Delphi RAD Berlin OutputDebugString 输出调试信息

    Delphi RAD Berlin Event Log.OutputDebugString 输出调试信息,仅在win VCL下可以用.OutputDebugString(PChar('hellowor ...

  8. 跟踪Makefile输出调试信息

    /********************************************************************* * 跟踪Makefile输出调试信息 * 说明: * 有时 ...

  9. Qt 使用#define+qDebug()输出调试信息

    /******************************************************************************************* * Qt 使用 ...

随机推荐

  1. nodejs调用cmd命令

    使用 child_process.exec 实现 child_process即子进程可以创建一个系统子进程并执行shell命令,在与系统层面的交互上非常有用 NodeJS子进程提供了与系统交互的重要接 ...

  2. HTTP之如何控制缓存

    HTTP控制缓存的能力 ===================摘自<HTTP权威指南>==================================== 服务器可以通过HTTP定义的 ...

  3. RDD的转换操作,分三种:单value,双value交互,(k,v)对

    import org.apache.spark.rdd.RDDimport org.apache.spark.{Partitioner, SparkConf, SparkContext} object ...

  4. springboot xss防护

    概述 XSS(Cross Site Script)全称跨站脚本攻击,为了跟CSS区分开来,所以变成了XSS.它允许恶意代码植入到正常的页面中,盗取正常用户的账号密码,诱使用户访问恶意的网站. 攻击 实 ...

  5. 微信小程序报thirdScriptError Cannot read property 'setData' of undefined

    用onLoad: function (options) {} 加载页面缓存的数据的时候报错   修改为          

  6. 深入V8引擎-默认Platform之mac篇(1)

    又到了常规的堆砌代码凑文章字数环节,很多API我就直接贴官方的英文释义,个人翻译其实有时候并不是很准确,搞错了甚至会误导,还是尽量自己去理解. 首先看看入口方法. std::unique_ptr< ...

  7. jQuery.form 上传文件

    今年大部分是都在完善产品,这几天遇到了一个问题,原来的flash组件不支持苹果浏览器,需要改.在网上搜了下,看到一个jQuery.form插件可以上传文件,并且兼容性很好,主要浏览器大部分都兼容,插件 ...

  8. Jenkins的使用(一)

    Jenkins 介绍: Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成 变成可能.前身是Huds ...

  9. 01 .NET CORE 2.2 使用OCELOT -- 简单使用

    目前参考两篇文章,已实现基本的ocelot的网关功能. https://www.cnblogs.com/xlxr45/p/11320988.html https://www.jianshu.com/p ...

  10. redis持久化rdb和aof之间的优势劣势

    1.RDB(Redis Database) a.基本概念 概念: 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis ...