原地址:http://www.cnblogs.com/koalaylj/archive/2012/09/04/2670629.html

最近在用unity3d开发Android上的游戏,一直Debug.Log感觉很悲剧,后来研究了下把log4net加了进去,能通过udp发送远程日志,电脑手机上都能发送日志,顿时神清气爽。可是后来才发现,把eclipse打开,连接到android设备后,Debug.Log 能直接在LogCat中显示出来,囧!

但是还是分享下我加入Log4net的过程吧,如果确实有需要的话可以借鉴下,少走点儿弯路,之前查各种资料各种费劲,其实一切没那么麻烦。。。

还是分步骤来说吧。

开发及测试环境:win7旗舰版 + .net2.0 + java6 + android + unity3.5;

1. 下载log4net,下来后把里面mono文件夹下的log4net.dll拿出来用。

2. 在unity3d中创建Asset\Log文件夹,日志相关的都放到这里,log4net的dll也拷贝到这里。注意要把unity的playerSetting中的api等级设置为.net2.0,不要用默认的.net2.0 subset,不然会各种报错(其实你引入其他dll的时候,什么没干就一堆错的话,很可能也是这个问题),然后创建log4net.xml,这个配置就不多说了,配置的是udpappender,直接粘代码。

<log4net>
  <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
 <localPort value="9090" />
 <remoteAddress value="192.168.199.80" />
 <remotePort value="8081" />
 <layout type="log4net.Layout.PatternLayout, log4net">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss,fff} %-5level [%c:%line] - %message%newline" />
    </layout>
 <filter type="log4net.Filter.LevelRangeFilter">
   <param name="LevelMin" value="DEBUG" />
   <param name="LevelMax" value="FATAL" />
 </filter>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="UdpAppender" />
  </root>
</log4net>

说明:remoteAddress和remotePort是接受udp日志的服务器地址和端口(后面说udp服务器配置),localPort是本地发送端口,要保证在手机上和电脑上这个端口都能使用。

3.配置udp日志接受服务器:好像udp日志能直接发送到cmd窗口中,无需什么配置,可是在windows下就是没搞成功,没办法,自己用.net写了个LogServer,就起一个端口监听下,简单的接受udp信息显示出来,具体不多说了,如果有兴趣看看的话可以稍后下载源代码(文章末尾部分提供所有代码下载)研究下。

4.使用,unity3d搞pc的游戏还好说,从加载文件比较方便,但是如果在手机上的话,从sd卡上加载就稍微有点儿别扭,所以如果需要在手机上用的,就把log4net.xml 拷贝到Resources目录下,改后缀为txt,这个目录unity能通过resources.load加载文件,不用自己找路径了。手机上用的话就加载这个配置文件。其实当初弄的时候就这个地方卡了我比较久,因为好多教程配置文件都在assembly.cs(.net原生项目才有)配置,unity3d中没法搞,后来才发现能直接加载文件进行配置,真是囧了。。

//4-1,log4net配置文件的路径

private static string _fileName =
#if UNITY_ANDROID
        "Config/log4net";
#elif UNITY_STANDALONE_WIN
 Application.dataPath + "/Log/log4net.xml";
#endif

//4-2,加载配置文件

#if UNITY_ANDROID
        byte[] xml = (Resources.Load(_fileName, typeof(TextAsset)) as TextAsset).bytes;
        XmlConfigurator.Configure(new MemoryStream(xml));
#elif UNITY_STANDALONE_WIN
        XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(_fileName));
#endif

剩下的使用就和在.net下原生开发一样了,就不多说了。

源代码下载地址:

sina http://iask.sina.com.cn/u/1634280977/ish?folderid=967939

csdn http://download.csdn.net/detail/koalaylj/4547902

Unity3d中使用log4net的更多相关文章

  1. 在C#代码中应用Log4Net系列教程(附源代码)

    Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

  2. 在C#代码中应用Log4Net(二)典型的使用方式

    不管用什么框架,学什么东西,最初的想法还不是尽快地用上这个框架,所以我们在这个章节还是不打算介绍具体配置节的应用,而是直接给出一个经典的使用样例,让你尽快上手.即使你对Log4Net的配置不熟悉也完全 ...

  3. 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释

    一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...

  4. 在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用

    前面的几篇文章已经比较完整地解释了怎么使用Log4Net,但是我们可能需要将Log4Net的日志类封装在自己的类库中,以便C/S或B/S程序进行调用.下面的示例程序简单地分为两层,一个是应用程序层We ...

  5. 【Unity3d游戏开发】Unity3D中的3D数学基础---向量

    向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...

  6. Unity3D中可中途释放的单例

    Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...

  7. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  8. unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)

      刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...

  9. Unity3D中Update()与FixedUpdate()的区别

    Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpd ...

随机推荐

  1. AtCoder Regular Contest 80

    链接 C. 4-adjacent 给定序列$a_i$,询问是否存在一个排列,满足$a_{p[i]}* a_{p[i + 1]}$是4的倍数 贪心构造 首先把只是2的倍数的数拿出来,放在最右边 前面把是 ...

  2. hdu 3294 manacher 求回文串

    感谢: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/ O(n)求给定字符串的以每个位置为中心的回文串长度. 中心思想:每次计算位 ...

  3. Codeforces Round #305 (Div. 1) B. Mike and Feet 单调栈

    B. Mike and Feet Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/547/pro ...

  4. 原生javascript知识点

    JAVASCRIPT 1.变量 1.1概念 变量源于数学,是计算机语言中存储计算结果或表示值抽象概念 计算机有个地方叫内存,变量都会将值存入到内存中,变量就是指向这个值的名字 1.2命名规则 1. 由 ...

  5. ios/object-c中的UIColor一些比较偏的颜色展示/示例

    UIColor blackColor]; [UIColor darkGrayColor]; [UIColor lightGrayColor]; [UIColor grayColor]; [UIColo ...

  6. Windows UWP开发系列 – MessageDialog 和 ContentDialog

    MessageDialog 在Metro程序中,没有传统的窗口,当我们要用需要交互的消息提示时,在Win8时代,引入了一个MessageDialog来取代常用的MessageBox.使用方法如下: p ...

  7. 8个超有用的Java測试工具和框架

    Java入门 假设你才刚開始接触Java世界,那么要做的第一件事情是,安装JDK--Java Development Kit(Java开发工具包),它自带有Java Runtime Environme ...

  8. [Android Pro] Android 手机root 并 安装 BusyBox pro 和 Android Terminal Emulator

    Android root 工具:http://www.z4root.cn/yijianrootshouji/ 推荐的是:root精灵手机版 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说 ...

  9. 运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy),三大件(bigthree problem)

    一般的我们喜欢这样对对象赋值: Person p1;Person p2=p1; classT object(another_object), or    A a(b); classT object = ...

  10. 监听内容变化 TextWatcher @功能

    监听多个TextView的内容变化 使用示例 TextWatcherUtils.addTextChangedListener(isAllNotEmpty -> btnLogin.setEnabl ...