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