Remotely/Agent.Installer.Win/Utilities/Logger.cs
2023-07-25 14:05:59 -07:00

83 lines
2.3 KiB
C#

using System;
using System.IO;
using System.Linq;
namespace Remotely.Agent.Installer.Win.Utilities;
public class Logger
{
public static string LogsDir { get; } = Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Remotely", "Logs")).FullName;
public static string LogsPath { get; } = Path.Combine(LogsDir, "Installer.log");
private static readonly object _writeLock = new object();
public static void Debug(string message)
{
lock (_writeLock)
{
#if DEBUG
CheckLogFileExists();
File.AppendAllText(LogsPath, $"{DateTimeOffset.Now:yyyy-MM-dd HH:mm:ss.fff}\t[Debug]\t{message}{Environment.NewLine}");
#endif
System.Diagnostics.Debug.WriteLine(message);
}
}
public static void Write(string message)
{
try
{
lock (_writeLock)
{
CheckLogFileExists();
File.AppendAllText(LogsPath, $"{DateTimeOffset.Now:yyyy-MM-dd HH:mm:ss.fff}\t[Info]\t{message}{Environment.NewLine}");
Console.WriteLine(message);
}
}
catch { }
}
public static void Write(Exception ex)
{
lock (_writeLock)
{
try
{
CheckLogFileExists();
var exception = ex;
while (exception != null)
{
File.AppendAllText(LogsPath, $"{DateTimeOffset.Now:yyyy-MM-dd HH:mm:ss.fff}\t[Error]\t{exception.Message}\t{exception.StackTrace}\t{exception.Source}{Environment.NewLine}");
Console.WriteLine(exception.Message);
exception = exception.InnerException;
}
}
catch { }
}
}
private static void CheckLogFileExists()
{
if (!File.Exists(LogsPath))
{
File.Create(LogsPath).Close();
}
if (File.Exists(LogsPath))
{
var fi = new FileInfo(LogsPath);
while (fi.Length > 1000000)
{
var content = File.ReadAllLines(LogsPath);
File.WriteAllLines(LogsPath, content.Skip(10));
fi = new FileInfo(LogsPath);
}
}
}
}