Merge pull request #560 from erri120/cleanup-logs

Cleanup logs
This commit is contained in:
Timothy Baldridge 2020-02-20 21:36:25 -07:00 committed by GitHub
commit 40cb9f3ec5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 5 deletions

View File

@ -103,5 +103,8 @@ namespace Wabbajack.Common
public static string PatchCacheFolder => Path.Combine(LocalAppDataPath, "patch_cache");
public static int MaxConnectionsPerServer = 4;
public static string LogsFolder = "logs";
public static int MaxOldLogs = 50;
}
}

View File

@ -53,20 +53,52 @@ namespace Wabbajack.Common
if (!Directory.Exists(Consts.LocalAppDataPath))
Directory.CreateDirectory(Consts.LocalAppDataPath);
if (!Directory.Exists("logs"))
Directory.CreateDirectory("logs");
if (!Directory.Exists(Consts.LogsFolder))
Directory.CreateDirectory(Consts.LogsFolder);
var programName = Assembly.GetEntryAssembly()?.Location ?? "Wabbajack";
LogFile = Path.Combine("logs", Path.GetFileNameWithoutExtension(programName) + ".current.log");
LogFile = Path.Combine(Consts.LogsFolder, Path.GetFileNameWithoutExtension(programName) + ".current.log");
_startTime = DateTime.Now;
if (LogFile.FileExists())
{
var newPath = Path.Combine("logs", Path.GetFileNameWithoutExtension(programName) + (new FileInfo(LogFile)).LastWriteTime.ToString(" yyyy-MM-dd HH_mm_ss") + ".log");
var newPath = Path.Combine(Consts.LogsFolder, Path.GetFileNameWithoutExtension(programName) + new FileInfo(LogFile).LastWriteTime.ToString(" yyyy-MM-dd HH_mm_ss") + ".log");
File.Move(LogFile, newPath, MoveOptions.ReplaceExisting);
}
var logFiles = Directory.GetFiles(Consts.LogsFolder);
if (logFiles.Length >= Consts.MaxOldLogs)
{
Log($"Maximum amount of old logs reached ({logFiles.Length} >= {Consts.MaxOldLogs})");
var filesToDelete = logFiles
.Where(File.Exists)
.OrderBy(f =>
{
var fi = new FileInfo(f);
return fi.LastWriteTime;
}).Take(logFiles.Length - Consts.MaxOldLogs).ToList();
Log($"Found {filesToDelete.Count} old log files to delete");
var success = 0;
var failed = 0;
filesToDelete.Do(f =>
{
try
{
File.Delete(f);
success++;
}
catch (Exception e)
{
failed++;
Log($"Could not delete log at {f}!\n{e}");
}
});
Log($"Deleted {success} log files, failed to delete {failed} logs");
}
var watcher = new FileSystemWatcher(Consts.LocalAppDataPath);
AppLocalEvents = Observable.Merge(Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>(h => watcher.Changed += h, h => watcher.Changed -= h).Select(e => (FileEventType.Changed, e.EventArgs)),
Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>(h => watcher.Created += h, h => watcher.Created -= h).Select(e => (FileEventType.Created, e.EventArgs)),