最近在用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