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