mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
Log: Clear mwb module interface old version log and clear dotnet old version log (#39652)
* Initial plan for issue * Add cleanup of old version log folders for Mouse Without Borders Co-authored-by: vanzue <69313318+vanzue@users.noreply.github.com> * Add try-catch block to cleanup_old_logs function Co-authored-by: vanzue <69313318+vanzue@users.noreply.github.com> * Refactor Mouse Without Borders log cleanup to use common mechanism Co-authored-by: vanzue <69313318+vanzue@users.noreply.github.com> * Investigate .NET logger cleanup mechanism for old version logs Co-authored-by: vanzue <69313318+vanzue@users.noreply.github.com> * delete in other thread * clear mwb previous folder * slow down the deletion --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -6,9 +6,10 @@ using System;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using PowerToys.Interop;
|
using PowerToys.Interop;
|
||||||
|
|
||||||
namespace ManagedCommon
|
namespace ManagedCommon
|
||||||
@@ -40,25 +41,72 @@ namespace ManagedCommon
|
|||||||
/// <param name="isLocalLow">If the process using Logger is a low-privilege process.</param>
|
/// <param name="isLocalLow">If the process using Logger is a low-privilege process.</param>
|
||||||
public static void InitializeLogger(string applicationLogPath, bool isLocalLow = false)
|
public static void InitializeLogger(string applicationLogPath, bool isLocalLow = false)
|
||||||
{
|
{
|
||||||
|
string basePath;
|
||||||
if (isLocalLow)
|
if (isLocalLow)
|
||||||
{
|
{
|
||||||
applicationLogPath = Environment.GetEnvironmentVariable("userprofile") + "\\appdata\\LocalLow\\Microsoft\\PowerToys" + applicationLogPath + "\\" + Version;
|
basePath = Environment.GetEnvironmentVariable("userprofile") + "\\appdata\\LocalLow\\Microsoft\\PowerToys" + applicationLogPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
applicationLogPath = Constants.AppDataPath() + applicationLogPath + "\\" + Version;
|
basePath = Constants.AppDataPath() + applicationLogPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Directory.Exists(applicationLogPath))
|
string versionedPath = Path.Combine(basePath, Version);
|
||||||
|
|
||||||
|
if (!Directory.Exists(versionedPath))
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(applicationLogPath);
|
Directory.CreateDirectory(versionedPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
var logFilePath = Path.Combine(applicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".log");
|
var logFilePath = Path.Combine(versionedPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".log");
|
||||||
|
|
||||||
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
||||||
|
|
||||||
Trace.AutoFlush = true;
|
Trace.AutoFlush = true;
|
||||||
|
|
||||||
|
// Clean up old version log folders
|
||||||
|
Task.Run(() => DeleteOldVersionLogFolders(basePath, versionedPath));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes old version log folders, keeping only the current version's folder.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="basePath">The base path to the log files folder.</param>
|
||||||
|
/// <param name="currentVersionPath">The path to the current version's log folder.</param>
|
||||||
|
private static void DeleteOldVersionLogFolders(string basePath, string currentVersionPath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(basePath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dirs = Directory.GetDirectories(basePath)
|
||||||
|
.Select(d => new DirectoryInfo(d))
|
||||||
|
.OrderBy(d => d.CreationTime)
|
||||||
|
.Where(d => !string.Equals(d.FullName, currentVersionPath, StringComparison.OrdinalIgnoreCase))
|
||||||
|
.Take(3)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var directory in dirs)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.Delete(directory.FullName, true);
|
||||||
|
LogInfo($"Deleted old log directory: {directory.FullName}");
|
||||||
|
Task.Delay(500).Wait();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"Failed to delete old log directory: {directory.FullName}", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError("Error cleaning up old log folders", ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void LogError(string message, [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
|
public static void LogError(string message, [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <common/utils/winapi_error.h>
|
#include <common/utils/winapi_error.h>
|
||||||
#include <common/utils/processApi.h>
|
#include <common/utils/processApi.h>
|
||||||
#include <common/utils/elevation.h>
|
#include <common/utils/elevation.h>
|
||||||
|
#include <common/utils/logger_helper.h>
|
||||||
|
|
||||||
HINSTANCE g_hInst_MouseWithoutBorders = 0;
|
HINSTANCE g_hInst_MouseWithoutBorders = 0;
|
||||||
|
|
||||||
@@ -409,9 +410,12 @@ public:
|
|||||||
{
|
{
|
||||||
app_name = L"MouseWithoutBorders";
|
app_name = L"MouseWithoutBorders";
|
||||||
app_key = app_name;
|
app_key = app_name;
|
||||||
std::filesystem::path logFilePath(PTSettingsHelper::get_module_save_folder_location(app_key));
|
|
||||||
logFilePath.append(LogSettings::mouseWithoutBordersLogPath);
|
LoggerHelpers::init_logger(app_key, L"ModuleInterface", LogSettings::mouseWithoutBordersLoggerName);
|
||||||
Logger::init(LogSettings::mouseWithoutBordersLoggerName, logFilePath.wstring(), PTSettingsHelper::get_log_settings_file_location());
|
|
||||||
|
std::filesystem::path oldLogPath(PTSettingsHelper::get_module_save_folder_location(app_key));
|
||||||
|
oldLogPath.append("LogsModuleInterface");
|
||||||
|
LoggerHelpers::delete_old_log_folder(oldLogPath);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user