天天看點

Unity3d中使用log4net

原位址: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" />

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));

剩下的使用就和在.net下原生開發一樣了,就不多說了。

源代碼下載下傳位址:

sina 

csdn