添加默认排序和按照等级筛选日志功能

This commit is contained in:
2025-09-07 20:04:17 +08:00
parent 5f0a4b23f4
commit 3489f8a064
2 changed files with 46 additions and 8 deletions

View File

@@ -13,6 +13,8 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using DMS.WPF.ViewModels.Dialogs; using DMS.WPF.ViewModels.Dialogs;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Collections.ObjectModel;
using System;
namespace DMS.WPF.ViewModels; namespace DMS.WPF.ViewModels;
@@ -32,10 +34,15 @@ partial class LogHistoryViewModel : ViewModelBase
[ObservableProperty] [ObservableProperty]
private string _searchText; private string _searchText;
[ObservableProperty]
private string _selectedLogLevel;
private readonly ObservableList<NlogItemViewModel> _logItemList; private readonly ObservableList<NlogItemViewModel> _logItemList;
private readonly ISynchronizedView<NlogItemViewModel, NlogItemViewModel> _synchronizedView; private readonly ISynchronizedView<NlogItemViewModel, NlogItemViewModel> _synchronizedView;
public NotifyCollectionChangedSynchronizedViewList<NlogItemViewModel> LogItemListView { get; } public NotifyCollectionChangedSynchronizedViewList<NlogItemViewModel> LogItemListView { get; }
public ObservableCollection<string> LogLevels { get; } = new ObservableCollection<string> { "Trace", "Debug", "Info", "Warn", "Error", "Fatal" };
public LogHistoryViewModel(IMapper mapper, INlogAppService nlogAppService, IDialogService dialogService, INotificationService notificationService) public LogHistoryViewModel(IMapper mapper, INlogAppService nlogAppService, IDialogService dialogService, INotificationService notificationService)
{ {
_mapper = mapper; _mapper = mapper;
@@ -50,16 +57,34 @@ partial class LogHistoryViewModel : ViewModelBase
private bool FilterLogs(NlogItemViewModel item) private bool FilterLogs(NlogItemViewModel item)
{ {
var searchTextLower = SearchText.ToLower(); // 搜索文本过滤
return item.Logger?.ToLower().Contains(searchTextLower) == true || var searchTextLower = SearchText?.ToLower() ?? string.Empty;
item.Message?.ToLower().Contains(searchTextLower) == true || var searchTextMatch = string.IsNullOrWhiteSpace(SearchText) ||
item.Exception?.ToLower().Contains(searchTextLower) == true || item.Logger?.ToLower().Contains(searchTextLower) == true ||
item.StackTrace?.ToLower().Contains(searchTextLower) == true; item.Message?.ToLower().Contains(searchTextLower) == true ||
item.Exception?.ToLower().Contains(searchTextLower) == true ||
item.StackTrace?.ToLower().Contains(searchTextLower) == true;
// 日志级别过滤
var levelMatch = string.IsNullOrWhiteSpace(SelectedLogLevel) ||
item.Level?.Equals(SelectedLogLevel, StringComparison.OrdinalIgnoreCase) == true;
return searchTextMatch && levelMatch;
} }
partial void OnSearchTextChanged(string value) partial void OnSearchTextChanged(string value)
{ {
if (string.IsNullOrWhiteSpace(SearchText)) ApplyFilter();
}
partial void OnSelectedLogLevelChanged(string value)
{
ApplyFilter();
}
private void ApplyFilter()
{
if (string.IsNullOrWhiteSpace(SearchText) && string.IsNullOrWhiteSpace(SelectedLogLevel))
{ {
_synchronizedView.ResetFilter(); _synchronizedView.ResetFilter();
} }
@@ -106,7 +131,11 @@ partial class LogHistoryViewModel : ViewModelBase
try try
{ {
var logs = await _nlogAppService.GetAllLogsAsync(); var logs = await _nlogAppService.GetAllLogsAsync();
var logItems = logs.Select(logDto =>
// 按时间倒序排序
var sortedLogs = logs.OrderByDescending(logDto => logDto.LogTime).ToList();
var logItems = sortedLogs.Select(logDto =>
{ {
// Manually map NlogDto to Nlog // Manually map NlogDto to Nlog
var nlog = new Nlog var nlog = new Nlog

View File

@@ -80,6 +80,15 @@
HorizontalAlignment="Left" HorizontalAlignment="Left"
ui:ControlHelper.PlaceholderText="搜索日志..." ui:ControlHelper.PlaceholderText="搜索日志..."
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource LogHistoryLabelStyle}" Text="级别:" />
<ComboBox
Width="100"
Margin="5,0,0,0"
HorizontalAlignment="Left"
ItemsSource="{Binding LogLevels}"
SelectedItem="{Binding SelectedLogLevel}"
ui:ControlHelper.PlaceholderText="所有级别" />
</ikw:SimpleStackPanel> </ikw:SimpleStackPanel>
@@ -90,7 +99,7 @@
Margin="10" Margin="10"
AutoGenerateColumns="False" AutoGenerateColumns="False"
CanUserDeleteRows="False" CanUserDeleteRows="False"
CanUserSortColumns="False" CanUserSortColumns="True"
IsReadOnly="True" IsReadOnly="True"
ItemsSource="{Binding LogItemListView}" ItemsSource="{Binding LogItemListView}"
SelectedItem="{Binding SelectedLog}" SelectedItem="{Binding SelectedLog}"