improve:改进日志功能

This commit is contained in:
CJK_mkp
2025-06-29 12:40:15 +08:00
parent 318682b63a
commit ec330aea69
5 changed files with 96 additions and 23 deletions
+69 -1
View File
@@ -8,6 +8,9 @@ namespace Ink_Canvas.Helpers
class LogHelper class LogHelper
{ {
public static string LogFile = "Log.txt"; public static string LogFile = "Log.txt";
private static string LogsFolder = "Logs";
private static string AppStartTime = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss");
private static readonly long MaxLogsFolderSizeBytes = 5 * 1024 * 1024; // 5MB
public static void NewLog(string str) public static void NewLog(string str)
{ {
@@ -28,14 +31,40 @@ namespace Ink_Canvas.Helpers
public static void WriteLogToFile(string str, LogType logType = LogType.Info) public static void WriteLogToFile(string str, LogType logType = LogType.Info)
{ {
// 检查日志是否启用
if (MainWindow.Settings != null && MainWindow.Settings.Advanced != null && !MainWindow.Settings.Advanced.IsLogEnabled) return;
string strLogType = logType.ToString(); string strLogType = logType.ToString();
try try
{ {
var file = App.RootPath + LogFile; string file;
// 检查是否启用了日期保存功能
if (MainWindow.Settings != null && MainWindow.Settings.Advanced != null && MainWindow.Settings.Advanced.IsSaveLogByDate)
{
// 确保Logs文件夹存在
string logsPath = Path.Combine(App.RootPath, LogsFolder);
if (!Directory.Exists(logsPath))
{
Directory.CreateDirectory(logsPath);
}
// 检查Logs文件夹大小,如果超过5MB则清空
CheckAndCleanLogsFolder(logsPath);
// 使用软件启动时间作为日志文件名
file = Path.Combine(logsPath, $"Log_{AppStartTime}.txt");
}
else
{
file = App.RootPath + LogFile;
}
if (!Directory.Exists(App.RootPath)) if (!Directory.Exists(App.RootPath))
{ {
Directory.CreateDirectory(App.RootPath); Directory.CreateDirectory(App.RootPath);
} }
var threadId = Thread.CurrentThread.ManagedThreadId; var threadId = Thread.CurrentThread.ManagedThreadId;
var callingMethod = new StackTrace(2, true).GetFrame(0); var callingMethod = new StackTrace(2, true).GetFrame(0);
string callerInfo = "<unknown>"; string callerInfo = "<unknown>";
@@ -57,6 +86,45 @@ namespace Ink_Canvas.Helpers
catch { } catch { }
} }
private static void CheckAndCleanLogsFolder(string logsPath)
{
try
{
long totalSize = 0;
DirectoryInfo dirInfo = new DirectoryInfo(logsPath);
// 如果目录不存在,直接返回
if (!dirInfo.Exists) return;
// 计算文件夹大小
foreach (FileInfo file in dirInfo.GetFiles())
{
totalSize += file.Length;
}
// 如果超过5MB,清空文件夹
if (totalSize > MaxLogsFolderSizeBytes)
{
foreach (FileInfo file in dirInfo.GetFiles())
{
try
{
file.Delete();
}
catch { }
}
// 记录清理操作
string cleanupMessage = $"Logs folder exceeded size limit ({totalSize / 1024.0 / 1024.0:F2} MB > {MaxLogsFolderSizeBytes / 1024.0 / 1024.0:F2} MB). Folder cleaned.";
using (StreamWriter sw = new StreamWriter(Path.Combine(logsPath, $"Log_{AppStartTime}.txt"), true))
{
sw.WriteLine($"{DateTime.Now:O} [Cleanup] {cleanupMessage}");
}
}
}
catch { }
}
internal static void WriteLogToFile(string v, object warning) internal static void WriteLogToFile(string v, object warning)
{ {
WriteLogToFile($"[Warning] {v}", LogType.Warning); WriteLogToFile($"[Warning] {v}", LogType.Warning);
+9 -2
View File
@@ -1693,7 +1693,14 @@
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold" IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchIsLogEnabled_Toggled" /> Toggled="ToggleSwitchIsLogEnabled_Toggled" />
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
<TextBlock Text="# 日志文件超过 512 KB 时会自动删除。" TextWrapping="Wrap" Foreground="#a1a1aa" /> <ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="日志以日期保存" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchIsSaveLogByDate"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchIsSaveLogByDate_Toggled" />
</ui:SimpleStackPanel>
<TextBlock Text="# 日志文件超过 512 KB 时会自动删除。开启日期保存后,日志将保存在Logs文件夹中,当文件夹大小超过5MB时自动清空。" TextWrapping="Wrap" Foreground="#a1a1aa" />
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="关闭软件时二次弹窗确认" VerticalAlignment="Center" <TextBlock Foreground="#fafafa" Text="关闭软件时二次弹窗确认" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" /> FontSize="14" Margin="0,0,16,0" />
@@ -3641,7 +3648,7 @@
TickFrequency="1" TickPlacement="None" TickFrequency="1" TickPlacement="None"
ValueChanged="HighlighterWidthSlider_ValueChanged" /> ValueChanged="HighlighterWidthSlider_ValueChanged" />
<TextBlock <TextBlock
Text="{Binding Value, ElementName=HighlighterWidthSlider, Mode=OneWay}" Text="{Binding Value, ElementName=BoardHighlighterWidthSlider, Mode=OneWay}"
FontFamily="Consolas" FontFamily="Consolas"
VerticalAlignment="Bottom" VerticalAlignment="Bottom"
Margin="10,0,0,4.5" FontSize="15" /> Margin="10,0,0,4.5" FontSize="15" />
+6
View File
@@ -1725,6 +1725,12 @@ namespace Ink_Canvas {
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchIsSaveLogByDate_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Advanced.IsSaveLogByDate = ToggleSwitchIsSaveLogByDate.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchIsSecondConfimeWhenShutdownApp_Toggled(object sender, RoutedEventArgs e) { private void ToggleSwitchIsSecondConfimeWhenShutdownApp_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return; if (!isLoaded) return;
Settings.Advanced.IsSecondConfirmWhenShutdownApp = ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn; Settings.Advanced.IsSecondConfirmWhenShutdownApp = ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn;
+9 -20
View File
@@ -547,41 +547,30 @@ namespace Ink_Canvas {
FingerModeBoundsWidthSlider.Value = Settings.Advanced.FingerModeBoundsWidth; FingerModeBoundsWidthSlider.Value = Settings.Advanced.FingerModeBoundsWidth;
NibModeBoundsWidthSlider.Value = Settings.Advanced.NibModeBoundsWidth; NibModeBoundsWidthSlider.Value = Settings.Advanced.NibModeBoundsWidth;
ToggleSwitchIsLogEnabled.IsOn = Settings.Advanced.IsLogEnabled; ToggleSwitchIsLogEnabled.IsOn = Settings.Advanced.IsLogEnabled;
ToggleSwitchIsSaveLogByDate.IsOn = Settings.Advanced.IsSaveLogByDate;
ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn = Settings.Advanced.IsSecondConfirmWhenShutdownApp; ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn = Settings.Advanced.IsSecondConfirmWhenShutdownApp;
ToggleSwitchEraserBindTouchMultiplier.IsOn = Settings.Advanced.EraserBindTouchMultiplier;
ToggleSwitchIsSpecialScreen.IsOn = Settings.Advanced.IsSpecialScreen; ToggleSwitchIsSpecialScreen.IsOn = Settings.Advanced.IsSpecialScreen;
TouchMultiplierSlider.Visibility =
ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed;
ToggleSwitchIsQuadIR.IsOn = Settings.Advanced.IsQuadIR; ToggleSwitchIsQuadIR.IsOn = Settings.Advanced.IsQuadIR;
ToggleSwitchEraserBindTouchMultiplier.IsOn = Settings.Advanced.EraserBindTouchMultiplier;
ToggleSwitchIsEnableFullScreenHelper.IsOn = Settings.Advanced.IsEnableFullScreenHelper; ToggleSwitchIsEnableFullScreenHelper.IsOn = Settings.Advanced.IsEnableFullScreenHelper;
ToggleSwitchIsEnableEdgeGestureUtil.IsOn = Settings.Advanced.IsEnableEdgeGestureUtil;
ToggleSwitchIsEnableForceFullScreen.IsOn = Settings.Advanced.IsEnableForceFullScreen;
ToggleSwitchIsEnableResolutionChangeDetection.IsOn = Settings.Advanced.IsEnableResolutionChangeDetection;
ToggleSwitchIsEnableDPIChangeDetection.IsOn = Settings.Advanced.IsEnableDPIChangeDetection;
ToggleSwitchIsEnableAvoidFullScreenHelper.IsOn = Settings.Advanced.IsEnableAvoidFullScreenHelper;
if (Settings.Advanced.IsEnableFullScreenHelper) { if (Settings.Advanced.IsEnableFullScreenHelper) {
FullScreenHelper.MarkFullscreenWindowTaskbarList(new WindowInteropHelper(this).Handle, true); FullScreenHelper.MarkFullscreenWindowTaskbarList(new WindowInteropHelper(this).Handle, true);
} }
ToggleSwitchIsEnableAvoidFullScreenHelper.IsOn = Settings.Advanced.IsEnableAvoidFullScreenHelper;
if (Settings.Advanced.IsEnableAvoidFullScreenHelper) if (Settings.Advanced.IsEnableAvoidFullScreenHelper)
{ {
AvoidFullScreenHelper.StartAvoidFullScreen(this); AvoidFullScreenHelper.StartAvoidFullScreen(this);
} }
ToggleSwitchIsEnableEdgeGestureUtil.IsOn = Settings.Advanced.IsEnableEdgeGestureUtil;
if (Settings.Advanced.IsEnableEdgeGestureUtil) { if (Settings.Advanced.IsEnableEdgeGestureUtil) {
if (OSVersion.GetOperatingSystem() >= OperatingSystem.Windows10) if (OSVersion.GetOperatingSystem() >= OperatingSystem.Windows10)
EdgeGestureUtil.DisableEdgeGestures(new WindowInteropHelper(this).Handle, true); EdgeGestureUtil.DisableEdgeGestures(new WindowInteropHelper(this).Handle, true);
} }
TouchMultiplierSlider.Visibility =
ToggleSwitchIsEnableForceFullScreen.IsOn = Settings.Advanced.IsEnableForceFullScreen; ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed;
ToggleSwitchIsEnableDPIChangeDetection.IsOn = Settings.Advanced.IsEnableDPIChangeDetection;
ToggleSwitchIsEnableResolutionChangeDetection.IsOn =
Settings.Advanced.IsEnableResolutionChangeDetection;
} else { } else {
Settings.Advanced = new Advanced(); Settings.Advanced = new Advanced();
} }
+3
View File
@@ -382,6 +382,9 @@ namespace Ink_Canvas
[JsonProperty("isLogEnabled")] [JsonProperty("isLogEnabled")]
public bool IsLogEnabled { get; set; } = true; public bool IsLogEnabled { get; set; } = true;
[JsonProperty("isSaveLogByDate")]
public bool IsSaveLogByDate { get; set; } = true;
[JsonProperty("isEnableFullScreenHelper")] [JsonProperty("isEnableFullScreenHelper")]
public bool IsEnableFullScreenHelper { get; set; } = false; public bool IsEnableFullScreenHelper { get; set; } = false;