93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using UnityEditor.DeploymentTargets;
 | |
| using UnityEditor.Utils;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace UnityEditor.TestTools.TestRunner.CommandLineTest
 | |
| {
 | |
|     internal class LogWriter : IDisposable
 | |
|     {
 | |
|         private string m_LogsDirectory;
 | |
|         private string m_DeviceID;
 | |
|         private Dictionary<string, StreamWriter> m_LogStreams;
 | |
|         private DeploymentTargetLogger m_Logger;
 | |
| 
 | |
|         internal LogWriter(string logsDirectory, string deviceID, DeploymentTargetLogger logger)
 | |
|         {
 | |
|             m_LogStreams = new Dictionary<string, StreamWriter>();
 | |
|             m_Logger = logger;
 | |
|             m_LogsDirectory = logsDirectory;
 | |
|             m_DeviceID = deviceID;
 | |
| 
 | |
|             logger.logMessage += WriteLogToFile;
 | |
|         }
 | |
| 
 | |
|         private void WriteLogToFile(string id, string logLine)
 | |
|         {
 | |
|             StreamWriter logStream;
 | |
|             var streamExists = m_LogStreams.TryGetValue(id, out logStream);
 | |
|             if (!streamExists)
 | |
|             {
 | |
|                 var filePath = GetLogFilePath(m_LogsDirectory, m_DeviceID, id);
 | |
|                 logStream = CreateLogFile(filePath);
 | |
| 
 | |
|                 m_LogStreams.Add(id, logStream);
 | |
|             }
 | |
| 
 | |
|             try
 | |
|             {
 | |
|                 if (logLine != null)
 | |
|                     logStream.WriteLine(logLine);
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 Debug.LogError($"Writing {id} log failed.");
 | |
|                 Debug.LogException(ex);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void Stop()
 | |
|         {
 | |
|             m_Logger.Stop();
 | |
|             foreach (var logStream in m_LogStreams)
 | |
|             {
 | |
|                 logStream.Value.Close();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void Dispose()
 | |
|         {
 | |
|             Stop();
 | |
|         }
 | |
| 
 | |
|         private StreamWriter CreateLogFile(string path)
 | |
|         {
 | |
|             Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Creating {0} device log: {1}", m_DeviceID, path);
 | |
|             StreamWriter streamWriter = null;
 | |
|             try
 | |
|             {
 | |
|                 if (!Directory.Exists(path))
 | |
|                     Directory.CreateDirectory(Path.GetDirectoryName(path));
 | |
| 
 | |
|                 streamWriter = File.CreateText(path);
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 Debug.LogError($"Creating device log {path} file failed.");
 | |
|                 Debug.LogException(ex);
 | |
|             }
 | |
| 
 | |
|             return streamWriter;
 | |
|         }
 | |
| 
 | |
|         private string GetLogFilePath(string lgosDirectory, string deviceID, string logID)
 | |
|         {
 | |
|             var fileName = "Device-" + deviceID + "-" + logID + ".txt";
 | |
|             fileName = string.Join("_", fileName.Split(Path.GetInvalidFileNameChars()));
 | |
|             return Paths.Combine(lgosDirectory, fileName);
 | |
|         }
 | |
|     }
 | |
| }
 |