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