詳解Unity日志打印工具功能_第1頁
詳解Unity日志打印工具功能_第2頁
詳解Unity日志打印工具功能_第3頁
詳解Unity日志打印工具功能_第4頁
詳解Unity日志打印工具功能_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第詳解Unity日志打印工具功能目錄一、日志工具功能二、Logger類三、LoggerMgr類四、上傳日志五、日志雙擊溯源問題

一、日志工具功能

封裝Debug類,需要實現(xiàn)功能:

1.控制所有日志是否打?。?/p>

2.除了Log,Warning,Error外,給更多日志種類(不同顏色);

3.格式化打印日志;

4.不定參數(shù),自動拼接成字符串;

5.上傳日志到服務器;

二、Logger類

1.控制日志打印

封裝Debug中關于Log的方法;

使用靜態(tài)方法,聲明靜態(tài)字段,控制log,warning,error是否打??;

Debug源碼中Log方法有兩個重載;

第二個參數(shù)context可以傳參GameObject,Hierarchy或者Project窗口中的預制體,雙擊Console日志會直接跳轉(zhuǎn)選中傳入的游戲物體;

我們可以將這個方法合并,第二個參數(shù)默認空;

2.色彩打印

打印不同顏色使用富文本;

string.Format("color={0}{1}/color",color,obj);

3.多參數(shù)拼接

之前使用Go語言的fmt.Println有個功能很好用,連續(xù)傳多個參數(shù)自動拼接;

publicstaticvoidLog(paramsobject[]messags)

if(!s_debugLogEnable)return;

stringmessage=string.Empty;

foreach(varitinmessags)

message+=it.ToString();

Debug.Log(message,null);

Logger.Log("Neterror:",error,"msgId:",msgId);

4.格式化打印

格式化打印封裝原本Debug.LogFormat方法;

publicstaticvoidLogFormat(stringformat,paramsobject[]args)

if(!s_debugLogEnable)return;

Debug.LogFormat(format,args);

}

三、LoggerMgr類

繼承MonoBehavior的單例;

初始化Logger中的三個控制打印的字段;

Application類中有收到日志消息觸發(fā)的事件LogMessageReceived;

監(jiān)聽這個事件;如果日志開關為關閉狀態(tài)return;

if(isOpenLog)

Logger.s_debugLogEnable=true;

Logger.s_warningLogEnable=true;

Logger.s_errorLogEnable=true;

Application.logMessageReceived+=(stringcondition,stringstackTrace,LogTypetype)=

switch(type)

caseLogType.Log:

if(!Logger.s_debugLogEnable)return;

break;

caseLogType.Warning:

if(!Logger.s_warningLogEnable)return;

break;

caseLogType.Error:

if(!Logger.s_errorLogEnable)return;

break;

};

四、上傳日志

LoggerMgr中初始化上傳日志信息;

方法寫在logger中,在LoggerMgr開始調(diào)用;

publicstaticvoidInit(stringurl)

LogUploader.SetUploadUrl(url);

//日期

vart=System.DateTime.Now.ToString("yyyyMMddhhmmss");

s_logFileSavePath=string.Format("{0}/output_{1}.log",Application.persistentDataPath,t);

Application.logMessageReceived+=OnLogCallBack;

}

OnLogCallBack方法中將日志和棧信息存儲成文件,等待上傳;

privatestaticvoidOnLogCallBack(stringcondition,stringstackTrace,LogTypetype)

s_logStr.Append(condition);

s_logStr.Append("\n");

s_logStr.Append(stackTrace);

s_logStr.Append("\n");

if(s_logStr.Length=0)return;

if(!File.Exists(s_logFileSavePath))

varfs=File.Create(s_logFileSavePath);

fs.Close();

using(varsw=File.AppendText(s_logFileSavePath))

sw.WriteLine(s_logStr.ToString());

s_logStr.Remove(0,s_logStr.Length);

}

LogUploader類

開啟協(xié)程上傳日志文件;

publicstaticvoidStartUploadLog(stringlogFilePath,stringdesc)

if(LOG_UPLOAD_URL==string.Empty)

return;

vargo=newGameObject("LogUploader");

varbhv=go.AddComponentLogUploader

bhv.StartCoroutine(bhv.UploadLog(logFilePath,LOG_UPLOAD_URL,desc));

}

在Logger類中同樣封裝上面的方法,所有的日志都通過Logger打??;

publicstaticvoidUploadLog(stringdesc)

LogUploader.StartUploadLog(s_logFileSavePath,desc);

}

五、日志雙擊溯源問題

以上的代碼有個很大的問題,現(xiàn)在我們雙擊不會回到調(diào)用Logger的地方,只會跳轉(zhuǎn)到Logger類中調(diào)用Debug.Log的地方;

有個很簡單的辦法解決,將上面代碼編譯成dll;

另外查找源碼也可以自己決定掉轉(zhuǎn)位置;

具體方法,通過反射獲日志取棧信息,根據(jù)Logger類返回的棧信息路徑,篩選出要跳轉(zhuǎn)的位置;

通過官方提供的方法跳轉(zhuǎn)到相應位置;

UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(stringfilename,intline);

六、調(diào)用

voidStart()

Logger.Log("aaaa");

Logger.LogFormat("{0}===={1}",111,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論