| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
| using System.IO; | 
| using System.Threading; | 
|   | 
|   | 
| public class RunTimeExceptionUtility : Singleton<RunTimeExceptionUtility> | 
|   | 
| { | 
|   | 
|     List<string> logWriteToFileTemp = new List<string>(); | 
|     DateTime nextWriteFileTime = DateTime.Now; | 
|     string logFileRoot = string.Empty; | 
|   | 
|     public void Init() | 
|     { | 
|         GlobalTimeEvent.Instance.secondEvent -= OnPerSecond; | 
|         Application.logMessageReceivedThreaded -= AddLogRenderer; | 
|   | 
|         if (!DebugUtility.Instance.debugAccount) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (Application.platform == RuntimePlatform.Android) | 
|         { | 
|             logFileRoot = Path.GetDirectoryName(Application.persistentDataPath); | 
|         } | 
|         else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.OSXEditor) | 
|         { | 
|             logFileRoot = Path.GetDirectoryName(Application.dataPath) + "/RunTimeLog"; | 
|         } | 
|         else | 
|         { | 
|             return; | 
|         } | 
|   | 
|         nextWriteFileTime = DateTime.Now + new TimeSpan(300 * TimeSpan.TicksPerSecond); | 
|   | 
|         GlobalTimeEvent.Instance.secondEvent += OnPerSecond; | 
|         Application.logMessageReceivedThreaded += AddLogRenderer; | 
|     } | 
|   | 
|     public void UnInit() | 
|     { | 
|         GlobalTimeEvent.Instance.secondEvent -= OnPerSecond; | 
|         Application.logMessageReceivedThreaded -= AddLogRenderer; | 
|     } | 
|   | 
|     private void AddLogRenderer(string _log, string _callStack, LogType _type) | 
|     { | 
|         logWriteToFileTemp.Add(string.Format("{0}--{1}:Thread:{2}-{3};{4}{5}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), _type, Thread.CurrentThread.ManagedThreadId, _log, _callStack, "\r\n")); | 
|     } | 
|   | 
|     private void OnPerSecond() | 
|     { | 
|         if (DateTime.Now > nextWriteFileTime) | 
|         { | 
|             nextWriteFileTime = DateTime.Now + new TimeSpan(300 * TimeSpan.TicksPerSecond); | 
|             if (logWriteToFileTemp.Count > 0) | 
|             { | 
|                 if (!Directory.Exists(logFileRoot)) | 
|                 { | 
|                     Directory.CreateDirectory(logFileRoot); | 
|                 } | 
|                 var path = logFileRoot + "/" + "RunTimeLog_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm") + ".txt"; | 
|                 File.WriteAllLines(path, logWriteToFileTemp.ToArray()); | 
|                 logWriteToFileTemp.Clear(); | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
| } |