GTPCorrgir/Logger.cs

110 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;
namespace GTPCorrgir
{
using System.Diagnostics;
public class Logger
{
private readonly string _logFilePath;
public Logger()
{
_logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logfile.log");
Trace.Listeners.Add(new TextWriterTraceListener(_logFilePath));
Trace.AutoFlush = true;
}
public void Log(string message)
{
// Formato de timestamp [AAAA-MM-DD HH:mm:ss]
string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Trace.WriteLine($"[{timestamp}] {message}");
}
/// <summary>
/// Obtiene las últimas líneas del log desde una interacción específica
/// </summary>
/// <param name="sinceMessage">Mensaje desde el cual comenzar a leer</param>
/// <returns>String con las líneas del log desde el mensaje especificado</returns>
public string GetRecentLogs(string sinceMessage = "Iniciando corrección de texto")
{
try
{
if (!File.Exists(_logFilePath))
return "No hay archivo de log disponible";
var lines = File.ReadAllLines(_logFilePath);
var recentLines = new List<string>();
bool foundStartPoint = false;
// Buscar desde la última ocurrencia del mensaje especificado
for (int i = lines.Length - 1; i >= 0; i--)
{
if (lines[i].Contains(sinceMessage))
{
foundStartPoint = true;
// Tomar todas las líneas desde este punto hasta el final
for (int j = i; j < lines.Length; j++)
{
recentLines.Add(lines[j]);
}
break;
}
}
if (!foundStartPoint)
{
// Si no encontramos el mensaje específico, tomar las últimas 20 líneas
int startIndex = Math.Max(0, lines.Length - 20);
for (int i = startIndex; i < lines.Length; i++)
{
recentLines.Add(lines[i]);
}
}
return string.Join("\n", recentLines);
}
catch (Exception ex)
{
return $"Error al leer el log: {ex.Message}";
}
}
/// <summary>
/// Obtiene las últimas N líneas del log
/// </summary>
/// <param name="lineCount">Número de líneas a obtener</param>
/// <returns>String con las últimas líneas del log</returns>
public string GetLastLogLines(int lineCount = 20)
{
try
{
if (!File.Exists(_logFilePath))
return "No hay archivo de log disponible";
var lines = File.ReadAllLines(_logFilePath);
int startIndex = Math.Max(0, lines.Length - lineCount);
var lastLines = new List<string>();
for (int i = startIndex; i < lines.Length; i++)
{
lastLines.Add(lines[i]);
}
return string.Join("\n", lastLines);
}
catch (Exception ex)
{
return $"Error al leer el log: {ex.Message}";
}
}
}
}