Files
AX-Copilot-Codex/.decompiledproj/AxCopilot/Services/LogService.cs

84 lines
1.5 KiB
C#

using System;
using System.IO;
namespace AxCopilot.Services;
public static class LogService
{
private static readonly string LogDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "AxCopilot", "logs");
private static readonly object _lock = new object();
private const int RetentionDays = 14;
private static bool _purged;
private static string LogFile => Path.Combine(LogDir, $"app-{DateTime.Now:yyyy-MM-dd}.log");
public static LogLevel MinLevel { get; set; } = LogLevel.Info;
public static void Debug(string msg)
{
Write(LogLevel.Debug, msg);
}
public static void Info(string msg)
{
Write(LogLevel.Info, msg);
}
public static void Warn(string msg)
{
Write(LogLevel.Warn, msg);
}
public static void Error(string msg)
{
Write(LogLevel.Error, msg);
}
private static void Write(LogLevel level, string msg)
{
if (level < MinLevel)
{
return;
}
try
{
Directory.CreateDirectory(LogDir);
string text = $"[{DateTime.Now:HH:mm:ss.fff}] [{level,-5}] {msg}";
lock (_lock)
{
File.AppendAllText(LogFile, text + Environment.NewLine);
}
if (!_purged)
{
_purged = true;
PurgeOldLogs();
}
}
catch
{
}
}
private static void PurgeOldLogs()
{
try
{
DateTime dateTime = DateTime.Now.AddDays(-14.0);
string[] files = Directory.GetFiles(LogDir, "app-*.log");
foreach (string path in files)
{
if (File.GetCreationTime(path) < dateTime)
{
File.Delete(path);
}
}
}
catch
{
}
}
}