improve:改进日志功能
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user