添加默认排序和按照等级筛选日志功能
This commit is contained in:
@@ -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;
|
||||||
|
var searchTextMatch = string.IsNullOrWhiteSpace(SearchText) ||
|
||||||
|
item.Logger?.ToLower().Contains(searchTextLower) == true ||
|
||||||
item.Message?.ToLower().Contains(searchTextLower) == true ||
|
item.Message?.ToLower().Contains(searchTextLower) == true ||
|
||||||
item.Exception?.ToLower().Contains(searchTextLower) == true ||
|
item.Exception?.ToLower().Contains(searchTextLower) == true ||
|
||||||
item.StackTrace?.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
|
||||||
|
|||||||
@@ -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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user