幸运PK10APP

  • <input id="yd5s6"><acronym id="yd5s6"><li id="yd5s6"></li></acronym></input>
  • <code id="yd5s6"><cite id="yd5s6"></cite></code>
  • <var id="yd5s6"><output id="yd5s6"></output></var>

  • <code id="yd5s6"></code>

    <code id="yd5s6"></code>

    360源碼屋(www.50154.cn)精品網站源碼,織夢模版,游戲源碼分享平臺
    當前位置:網站首頁 VIP資源 網站搭建 正文

    Unity 自定義日志保存

    時間:2020-03-06 23:46:44 [網站搭建]作者:360源碼屋

       360網站源碼總結:之前unity5.x在代碼中寫了debug.log..等等,打包之后在當前程序文件夾下會有個對應的"outlog.txt",2017之后這個文件被移到C盤用戶Appdata/LocalLow/公司名 文件夾下面。覺得不方便就自己寫了個


    代碼: 


    using UnityEngine;

    using System.IO;

    using System;

    using System.Diagnostics;

    using Debug = UnityEngine.Debug;

     

     

    public class DebugTrace

    {

        private FileStream fileStream;

        private StreamWriter streamWriter;

     

        private bool isEditorCreate = false;//是否在編輯器中也產生日志文件

        private int showFrames = 1000;  //打印所有

     

        #region instance

        private static readonly object obj = new object();

        private static DebugTrace m_instance;

        public static DebugTrace Instance

        {

            get

            {

                if (m_instance == null)

                {

                    lock (obj)

                    {

                        if (m_instance == null)

                            m_instance = new DebugTrace();

                    }

                }

                return m_instance;

            }

        }

        #endregion

     

        private DebugTrace()

        {

     

        }

     

     

     

        /// <summary>

        /// 開啟跟蹤日志信息

        /// </summary>

        public void StartTrace()

        {

            if (Debug.unityLogger.logEnabled)

            {

                if (Application.isEditor)

                {

                    //在編輯器中設置isEditorCreate==true時候產生日志

                    if (isEditorCreate)

                    {

                        CreateOutlog();

                    }

                }

                //不在編輯器中 是否產生日志由  Debug.unityLogger.logEnabled 控制

                else

                {

                    CreateOutlog();

                }

            }

        }

        private void Application_logMessageReceivedThreaded(string logString, string stackTrace, LogType type)

        {

            //  Debug.Log(stackTrace);  //打包后staackTrace為空 所以要自己實現

            if (type != LogType.Warning)

            {

                // StackTrace stack = new StackTrace(1,true); //跳過第二?(1)幀

                StackTrace stack = new StackTrace(true);  //捕獲所有幀

                string stackStr = string.Empty;

     

                int frameCount = stack.FrameCount;  //幀數

                if (this.showFrames > frameCount) this.showFrames = frameCount;  //如果幀數大于總幀速 設置一下

     

                //如果堆棧幀數大于2 就獲取最后兩幀 反之全部輸出

                for (int i = stack.FrameCount - this.showFrames; i < stack.FrameCount; i++)

                {

                    StackFrame sf = stack.GetFrame(i);  //堆棧爸爸

                                                        // 1:第一種    ps:GetFileLineNumber 在發布打包后獲取不到

                    stackStr += "at [" + sf.GetMethod().DeclaringType.FullName +

                                "." + sf.GetMethod().Name +

                                ".Line:" + sf.GetFileLineNumber() + "]\n            ";

     

                    //或者直接調用tostring 顯示數據過多 且打包后有些數據獲取不到

                    // stackStr += sf.ToString();

                }

     

                //或者 stackStr = stack.ToString();

                string content = string.Format("time: {0}   logType: {1}    logString: {2} \nstackTrace: {3} {4} ",

                                                   DateTime.Now.ToString("HH:mm:ss"), type, logString, stackStr, "\r\n");

                streamWriter.WriteLine(content);

                streamWriter.Flush();

            }

        }

        private void CreateOutlog()

        {

            if (!Directory.Exists(Application.dataPath + "/../" + "OutLog"))

                Directory.CreateDirectory(Application.dataPath + "/../" + "OutLog");

            string path = Application.dataPath + "/../OutLog" + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_log.txt";

            fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite);

            streamWriter = new StreamWriter(fileStream);

            Application.logMessageReceivedThreaded += Application_logMessageReceivedThreaded;

        }

     

        /// <summary>

        /// 關閉跟蹤日志信息

        /// </summary>

        public void CloseTrace()

        {

            Application.logMessageReceivedThreaded -= Application_logMessageReceivedThreaded;

            streamWriter.Dispose();

            streamWriter.Close();

            fileStream.Dispose();

            fileStream.Close();

        }

        /// <summary>

        /// 設置選項

        /// </summary>

        /// <param name="logEnable">是否記錄日志</param>

        /// <param name="showFrams">是否顯示所有堆棧幀 默認只顯示當前幀 如果設為0 則顯示所有幀</param>

        /// <param name="filterLogType">過濾 默認log級別以上</param>

        /// <param name="editorCreate">是否在編輯器中產生日志記錄 默認不需要</param>

        public void SetLogOptions(bool logEnable, int showFrams = 1, LogType filterLogType = LogType.Log, bool editorCreate = false)

        {

            Debug.unityLogger.logEnabled = logEnable;

            Debug.unityLogger.filterLogType = filterLogType;

            isEditorCreate = editorCreate;

            this.showFrames = showFrams == 0 ? 1000 : showFrams;

        }

     

    }

    關于 filterLogType


    filterLogType默認設置是Log,會顯示所有類型的Log。


    Warning:會顯示Warning,Assert,Error,Exception


    Assert:會顯示Assert,Error,Exception


    Error:顯示Error和Exception


    Exception:只會顯示Exception


     


    使用:


    using UnityEngine;

     

    public class Test : MonoBehaviour

    {

        private BoxCollider boxCollider;

        void Start()

        {

            DebugTrace.Instance.SetLogOptions(true, 2, editorCreate: true); //設置日志打開 顯示2幀 并且編輯器下產生日志

            DebugTrace.Instance.StartTrace();

            Debug.Log("log");

            Debug.Log("log", this);

            Debug.LogError("LogError");

            Debug.LogAssertion("LogAssertion");

          

            boxCollider.enabled = false;  //報錯 發布后捕捉不到幀

        }

     

        private void OnApplicationQuit()

        {

            DebugTrace.Instance.CloseTrace();

        }

    }

    如果在編輯器中也設置產生日志,日志文件在當前項目路徑下,打包后在exe同級目錄下


    在打包發布后某些數據會獲取不到 例如行號 參考:


    不足:發布版本 出現異常捕捉不到 行號獲取不到


    debug版本可以勾選DevelopMend build 捕捉到更多信息




    本文標簽:AutoTags插件服務端需要您提供購買者的賬號和密碼才能繼續訪問  福利活動  自由織夢  織夢貓  秀站網  跟版網  dede58  莎莎源碼  折翼天使 

    轉載請注明來源:Unity 自定義日志保存

    本文永久鏈接地址:http://www.50154.cn/9644.html

    鄭重聲明:
    本站所有內容均由互聯網收集整理、網友上傳,并且以計算機技術研究交流為目的,僅供大家參考、學習,不存在任何商業目的與商業用途。
    若您需要商業運營或用于其他商業活動,請您購買正版授權并合法使用。 我們不承擔任何技術及版權問題,且不對任何資源負法律責任。
    如無法鏈接失效或侵犯版權,請給我們來信:han2311678@163.com

    幸运PK10APP
    大埔| 东岗| 邱县| 鸡泽| 昌吉| 大厂| 纳雍| 周口| 睢宁| 湖口| 昭通| 临漳| 安岳| 石景山| 江浦| 东台| 木兰| 景东| 平山| 西盟| 咸阳| 淇县| 陇川| 宽甸| 镇原| 肥西| 马关| 云浮| 镇赉| 三穗| 将乐| 海宁| 宁津| 稷山| 潼南| 华家岭| 霍城| 雅江| 防城港| 颍上| 纳溪| 北票| 桓仁| 丰台| 瓦房店| 雷山| 上犹| 定陶| 天镇| 海力素| 贡嘎| 吉林| 上杭| 枣庄| 澜沧| 永署礁| 锡林浩特| 泽当| 天柱| 泰和| 吴江| 杨凌| 阿鲁科尔沁旗| 鄯善| 临沭| 金乡| 讷河| 高唐| 平远| 哈密| 霞浦| 宽城| 户县| 曹妃甸| 安顺| 克东| 喀喇沁旗| 开阳| 余干| 临洮| 万全| 元江| 景泰| 清兰| 黑山头| 巴楚| 瑞昌| 杜蒙| 枝江| 麻江| 丽江| 吉兰太| 马鬃山| 邛崃| 常宁| 东吉屿| 马关| 湘阴| 中江| 治多| 迁安| 建昌| 阳新| 南宁| 宣化| 高唐| 溧水| 平乐| 嘉义| 通化| 武川| 静海| 双城| 惠州| 石渠| 石河子| 磐安| 阳信| 开县| 尼勒克| 成安| 华安| 草河口| 麻阳| 道真| 宁洱| 壤塘| 紫云| 佛爷顶| 沂水| 阜新| 忻城| 衡南| 岷县| 涪陵| 泰宁| 临漳| 雷州| 根河| 淖毛湖| 桂林| 吴桥| 正镶白旗| 微山| 霍城| 准格尔旗| 怀来| 榆次| 交城| 南涧| 义县| 彭泽| 嘉荫| 和硕| 八达岭| 建湖| 希拉穆仁| 乐清| 珙县| 平江| 东沙岛| 蓬莱| 罗山| 郴州| 乌鞘岭| 炉山| 天池| 魏山| 信阳地区农试站| 特克斯| 启东| 延寿| 洋县| 扶绥| 三河| 类乌齐| 德惠| 杭锦后旗| 新建| 麻江| 鹰潭| 江宁| 漯河| 小二沟| 翼城| 六库| 栾川| 武乡| 茶陵| 武川| 崇州| 黎城| 滑县| 盈江| 香港| 莱阳| 凤县| 临猗| 奈曼旗| 微山| 盐山| 丰都| 南昌| 五莲| 南川| 陇西| 环江| 北塔山| 科尔沁左翼中旗| 日喀则| 黑河| 盂县| 江西沟| 犍为| 剑川| 定安| 大关| 韶关| 昆明| 三台| 睢县| 清河| 青龙山| 富裕| 会昌| 河津| 祁阳| 安泽| 同心| 尤溪| 彭水| 丹东| 定边| 余江| 惠东| 吉安县| 鸡西| 云龙| 道孚| 会理| 阿勒泰| 瑞安| 银川| 南宁| 石楼| 连云港| 莱州| 舒城| 察哈尔右翼后旗| 海渊| 锦州| 康保| 安新| 贵港| 长宁| 江夏| 皮山| 海力素| 丰镇| 信丰| 蠡县| 云和| 五大连池| 仁怀| 石拐| 焉耆| 常州| 大余| 资中| 沐川| 丰顺| 枞阳| 无锡| 昔阳| 伊通| 洱源| 通渭| 铜锣湾| 三亚| 丁青| 辰溪| 孟村| 治多| 丹寨| 城口| 新巴尔虎左旗| 阳春| 铜锣湾| 石炭井| 永仁| 连南| 新田| 武宁| 张家港| 库车| 虎林| 仪征| 本溪| 南京| 潮阳| 黎城| 永修| 恩平| 板栏| 红柳河| 惠州| 禄丰| 壤塘| 桐梓| 砀山| 临潭| 凌海| 台南| 尼勒克| 米脂| 绥滨| 南阳| 草河口| 马边| 察哈尔右翼前旗| 武邑| 通渭| 江油| 松原| 湟源| 惠农| 建昌| 丰都| 库尔勒| 静宁| 嘉兴| 大名| 始兴| 吐鲁番东坎| 松潘| 金塔| 宾阳| 阜城| 响水| 通江| 上思| 小二沟| 峡江| 新干| 枣阳| 兰溪| 泾源| 卢龙| 蛟河| 峨边| 安定| 鸡西| 辰溪| 临城| 云浮| 襄垣| 燕尾港| 凭祥| 涞水| 湟中| 林州| 余姚| 夷陵| 偃师| 兴仁堡| 周口| 林州| 南宫| 太平| 沭阳| 左贡| 绥江| 淳安| 台北县| 临安| 南坪| 河南| 魏县| 无锡| 罗甸| 靖安| 龙泉| 淮南| 宝丰| 灵邱| 江门| 泸溪| 东平| 敖汉旗| 台山| 清河| 连州| 日喀则| 武安| 宣恩| 威信| 钟山| 万载| 阿拉善左旗| 高陵