using System; using System.IO; using UnityEngine; public class Logger : MonoBehaviour { private static Logger instance; private string logFilePath; private StreamWriter writer; public static Logger Instance { get { return instance; } } /// /// Инициализирует логгер и создает файл лога /// public void Initialize() { try { instance = this; // Получаем путь к папке PersistentDataPath string persistentPath = Application.persistentDataPath; // Создаем имя файла с датой и временем string fileName = $"comlog_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.txt"; logFilePath = Path.Combine(persistentPath, fileName); // Создаем директорию если не существует string directory = Path.GetDirectoryName(logFilePath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // Создаем файл и записываем начальное сообщение writer = new StreamWriter(logFilePath, true); string startMessage = $"Начало логгирования {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; writer.WriteLine(startMessage); writer.Flush(); //Debug.Log($"Логгер инициализирован. Файл: {logFilePath}"); } catch (Exception e) { Debug.LogError($"Ошибка инициализации логгера: {e.Message}"); } } /// /// Записывает сообщение в лог /// /// Сообщение для записи public void Log(string message) { if (writer == null) { Debug.LogWarning("Логгер не инициализирован. Сначала вызовите Initialize()."); return; } try { string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}"; writer.WriteLine(logEntry); writer.Flush(); // Принудительно записываем в файл } catch (Exception e) { Debug.LogError($"Ошибка записи в лог: {e.Message}"); } } /// /// Закрывает логгер и освобождает ресурсы /// public void Close() { if (writer != null) { try { string endMessage = $"Конец логгирования {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; writer.WriteLine(endMessage); writer.Flush(); writer.Close(); writer = null; } catch (Exception e) { Debug.LogError($"Ошибка закрытия логгера: {e.Message}"); } } } void OnApplicationQuit() { Close(); } void OnDestroy() { Close(); } }