This commit is contained in:
@ -539,6 +539,16 @@ namespace Elwig.Helpers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<EventLogEntry> GetLogEntries() {
|
||||||
|
using var log = new EventLog {
|
||||||
|
Log = "Application",
|
||||||
|
Source = ".NET Runtime",
|
||||||
|
};
|
||||||
|
return log.Entries.Cast<EventLogEntry>()
|
||||||
|
.Where(e => e.Message.StartsWith("Application: Elwig.exe"))
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
public static int GetEntityIdetifierForPk(params object?[] primaryKey) {
|
public static int GetEntityIdetifierForPk(params object?[] primaryKey) {
|
||||||
var pk = primaryKey.Select(k => k?.GetHashCode() ?? 0).ToArray();
|
var pk = primaryKey.Select(k => k?.GetHashCode() ?? 0).ToArray();
|
||||||
return ((IStructuralEquatable)pk).GetHashCode(EqualityComparer<int>.Default);
|
return ((IStructuralEquatable)pk).GetHashCode(EqualityComparer<int>.Default);
|
||||||
|
34
Elwig/Windows/LogWindow.xaml
Normal file
34
Elwig/Windows/LogWindow.xaml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<Window x:Class="Elwig.Windows.LogWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Elwig.Windows"
|
||||||
|
Title="Fehler-Protokoll - Elwig" Height="600" Width="1000"
|
||||||
|
Loaded="Window_Loaded">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition Width="5"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<DataGrid x:Name="EventList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
|
||||||
|
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False"
|
||||||
|
SelectionChanged="EventList_SelectionChanged"
|
||||||
|
Margin="10,10,5,10">
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridTextColumn Header="Ebene" Binding="{Binding Event.EntryType}" Width="60"/>
|
||||||
|
<DataGridTextColumn Header="Zeitpunkt" Binding="{Binding Event.TimeGenerated, StringFormat='{}{0:dd.MM.yyyy HH:mm:ss}'}" Width="120"/>
|
||||||
|
<DataGridTextColumn Header="Gerät" Binding="{Binding Event.MachineName}" Width="120"/>
|
||||||
|
<DataGridTextColumn Header="Fehler" Binding="{Binding ExceptionName}" Width="200"/>
|
||||||
|
<DataGridTextColumn Header="Beschreibung" Binding="{Binding ExceptionMessage}" Width="200"/>
|
||||||
|
<DataGridTextColumn Header="Herkunft" Binding="{Binding Location}" Width="200"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
|
||||||
|
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||||
|
|
||||||
|
<TextBox x:Name="EventData" Grid.Column="2" Margin="5,10,10,10" IsReadOnly="True"
|
||||||
|
HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
44
Elwig/Windows/LogWindow.xaml.cs
Normal file
44
Elwig/Windows/LogWindow.xaml.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using Elwig.Helpers;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Elwig.Windows {
|
||||||
|
public partial class LogWindow : Window {
|
||||||
|
|
||||||
|
public LogWindow() {
|
||||||
|
InitializeComponent();
|
||||||
|
WindowState = WindowState.Maximized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||||||
|
var log = Utils.GetLogEntries();
|
||||||
|
EventList.ItemsSource = log
|
||||||
|
.Select(e => new {
|
||||||
|
Event = e,
|
||||||
|
Lines = e.Message.Split('\n').ToArray(),
|
||||||
|
})
|
||||||
|
.Select(e => new {
|
||||||
|
e.Event,
|
||||||
|
Exception = e.Lines.FirstOrDefault(l => l.StartsWith("Exception Info: "))?[16..].Trim().Split(':', 2),
|
||||||
|
Location = e.Lines.FirstOrDefault(l => l.StartsWith(" at Elwig."))?[5..].Trim(),
|
||||||
|
})
|
||||||
|
.Select(e => new {
|
||||||
|
e.Event,
|
||||||
|
e.Exception,
|
||||||
|
ExceptionName = e.Exception?[0].Trim(),
|
||||||
|
ExceptionMessage = e.Exception?.Length >= 2 ? e.Exception?[1].Trim() : null,
|
||||||
|
e.Location,
|
||||||
|
})
|
||||||
|
.OrderByDescending(e => e.Event.TimeGenerated)
|
||||||
|
.ToList();
|
||||||
|
EventList.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EventList_SelectionChanged(object sender, RoutedEventArgs evt) {
|
||||||
|
var t = EventList.SelectedItem.GetType();
|
||||||
|
var p = t.GetProperty("Event")!;
|
||||||
|
EventData.Text = ((EventLogEntry)p.GetValue(EventList.SelectedItem)!).Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -32,6 +32,7 @@
|
|||||||
<MenuItem Header="Über"/>
|
<MenuItem Header="Über"/>
|
||||||
<MenuItem x:Name="Menu_Help_Update" Header="Nach Updates suchen" Click="Menu_Help_Update_Click"/>
|
<MenuItem x:Name="Menu_Help_Update" Header="Nach Updates suchen" Click="Menu_Help_Update_Click"/>
|
||||||
<MenuItem x:Name="Menu_Help_Smtp" Header="E-Mail-Einstellungen testen" Click="Menu_Help_Smtp_Click"/>
|
<MenuItem x:Name="Menu_Help_Smtp" Header="E-Mail-Einstellungen testen" Click="Menu_Help_Smtp_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_Help_Log" Header="Fehler-Protokoll anzeigen" Click="Menu_Help_Log_Click"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem x:Name="Menu_Help_Config" Header="Konfigurationsdatei öffnen..." Click="Menu_Help_Config_Click"/>
|
<MenuItem x:Name="Menu_Help_Config" Header="Konfigurationsdatei öffnen..." Click="Menu_Help_Config_Click"/>
|
||||||
<MenuItem x:Name="Menu_Help_Directory" Header="Konfigurationsspeicherort öffnen..." Click="Menu_Help_Directory_Click"/>
|
<MenuItem x:Name="Menu_Help_Directory" Header="Konfigurationsspeicherort öffnen..." Click="Menu_Help_Directory_Click"/>
|
||||||
|
@ -90,6 +90,11 @@ namespace Elwig.Windows {
|
|||||||
} catch { }
|
} catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Menu_Help_Log_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
var w = new LogWindow();
|
||||||
|
w.Show();
|
||||||
|
}
|
||||||
|
|
||||||
private async void Menu_Scale_SetDateTime_Click(object sender, RoutedEventArgs evt) {
|
private async void Menu_Scale_SetDateTime_Click(object sender, RoutedEventArgs evt) {
|
||||||
if (App.CommandScales.Count == 0) {
|
if (App.CommandScales.Count == 0) {
|
||||||
MessageBox.Show("Es sind keine geeigneten Waagen verfügbar!", "Datum und Uhrzeit setzen", MessageBoxButton.OK, MessageBoxImage.Error);
|
MessageBox.Show("Es sind keine geeigneten Waagen verfügbar!", "Datum und Uhrzeit setzen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Reference in New Issue
Block a user