110 lines
3.2 KiB
C#
110 lines
3.2 KiB
C#
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Инициализирует логгер и создает файл лога
|
||
/// </summary>
|
||
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}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Записывает сообщение в лог
|
||
/// </summary>
|
||
/// <param name="message">Сообщение для записи</param>
|
||
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}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Закрывает логгер и освобождает ресурсы
|
||
/// </summary>
|
||
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();
|
||
}
|
||
} |