# MyLog **Repository Path**: meteor-fire/MyLog ## Basic Information - **Project Name**: MyLog - **Description**: 在Unity3d项目中使用Log4net框架来输出日志信息。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2021-09-07 - **Last Updated**: 2021-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyLog使用指南 MyLog框架是在Unity3d项目中使用Log4net框架来输出日志信息的。 本项目是根据Jashan Chittesh - jc@ramtiga.com的 [http://forum.unity3d.com/threads/using-log4net-for-logging.8380/](http://forum.unity3d.com/threads/using-log4net-for-logging.8380/)帖子整理而成。 在大体保留了大部分代码的情况下,对出现的错误进行了修复,以便于使用。 在Windows环境下测试Unity4.X到Unity5.X都合适使用。 ## 1. 导入 从Unity编辑器中导入发布包,导入时,选择全部的文件。 发布包在ReleasePackage目录下。 ## 2. 配置文件的编辑 在MyLogConfiguration/log4net.xml文件中,有对日志框架的配置, 请不要随意改动MyLogConfiguration/log4net.xml的路径。因为框架默认读取配置文件的路径是Application.dataPath/MyLogConfiguration/log4net.xml。如果需要修改配置文件的路径,请查看MyLogHelper.MyLogHelperConfig()函数。 log4net.xml中有对日志框架的配置,配置选项和log4net官方相同,请参考log4net官方文档。[http://logging.apache.org/log4net/](http://logging.apache.org/log4net/) 默认情况下,log4net.xml配置文件已经配置好了,可以直接使用,如果你想要达到自己想要的各种日志信息输出效果,请查阅官方文档进行配置。 ## 3. 日志框架的具体调用 想要在某个类中输出日志信息,可以参考下面的做法。 总结起来就是分两步1.初始化; 2.调用Debug、Info等函数。 ``` using UnityEngine; using System.Collections; public class MyLogTestExample1 : MonoBehaviour { //错误的初始化日志类调用方式,会报错get_dataPath can only be called from the main thread. //MyLogHelper因为构造函数中用了Application.dataPath //private MyLogHelper log=new MyLogHelper(typeof(MyLogTestExample1)); //正确的初始化方式,在Awake函数或者Start函数中初始化调用 //1.初始化 private MyLogHelper log; void Awake() { //1.初始化 log = new MyLogHelper(typeof(MyLogTestExample1)); //需要传递调用日志类的类型 } public float someFloatVariable = 123.4F; // Use this for initialization void Start () { print("Now logging should start..."); //这里就可以调用log的各种函数来输出日志了 //2.调用Debug、Info等函数 log.Debug("Debug message-->there can be plenty of these"); log.Info("Info message-->These should me more sparse"); log.Warn("Warn message-->THIS is warn message"); log.Error("Error message-->When some error has occured that can be handled"); log.Fatal("Fatal message-->Use this when something really serious has happened!"); log.InfoFormat("Handy shortcut for string.Format - {0}", someFloatVariable); //还可以输出异常日志,调用方式和log4net一样,请参考log4net官方文档 } // Update is called once per frame void Update () { //log.Debug("Debug message-->there can be plenty of these"); } } ``` ## 4. 其他说明 MyLogExample目录下提供了两个示例,可供参考。 ## 5. 程序运行效果 ![](http://git.oschina.net/jyunfan/MyLog/raw/master/Assets/MyLogDoc/effect.jpg) ## 6. 其他说明 MyLogLibrary\Log4netLibForMono2.0下面有两个dll文件,其中log4net.dll是必须的,System.Web.dll是不是必须的。 ##### 6.1.需要System.Web.dll文件的原因 因为log4net框架原生设计带有对.Net Web项目的支持,就是在.Net Web项目中输出日志。 所以log4net编译的时候,需要以下这几个包的支持 System System.Configuration System.Data System.Web System.XML Mono官方发布包里是有上述几个dll。Unity4.X到5.0.0f1编辑器是用了Mono2.8运行时,但是对于dll的选用则是不完全的。 在unity4.X,5.X中上述几个包不全,其中unity4.0.0f7有上述dll,unity4.6.4f1,unity5.0.0f1都没有System.Configuration.dll和System.Web.dll文件。 在使用UnityVS断点调试时候,Visual Studio会提示log4net有对System.Web.dll 2.0的依赖,需要加入这个类库文件,才能调试。 此时如果你直接用Visual Studio自带的System.Web.dll 2.0文件会报错,需要使用Mono官方发布的System.Web.dll 2.0文件。这里的这个System.Web.dll文件来源于Mono官方发布包。 ##### 6.2.使用说明 【UnityVS调试时候】在unity3d项目中使用log4net,完全没有用到System.Web的任何内容,只是为了满足UnityVS调试的要求,所以调试的时候需要这个dll. 【游戏正式发布的时候】当你在正式发布游戏包的时候,请把这个System.Web.dll去掉(测试好之后,发布的时候,删除这个dll),进一步减少游戏发布文件的体积。 ##### 6.3.题外话 题外话-从上述的使用.Net类库的过程来看,要么Unity引擎未来的要么摆脱对Mono的依赖,因为各种原因,Unity4.X-5.X至今使用2010年发布的Mono2.8,对所有项目使用IL2CPP来生成跨平台的代码,而不再用Mono跨平台。目前IL2CPP的应用,unity5.X用生成WebGL项目,iOS 64项目。 来源:[http://www.indieace.com/thread-8199-1-1.html](http://www.indieace.com/thread-8199-1-1.html)