Logger
- class ClientSDK.Logger
Events
- ClientSDK.Logger.Event
- Return type
EventHandler<ClientApiLoggerEventArgs>
Example WPF Logging UserControl
C# Code-Behind
using ONE.UserControls.Utilities;
using ONE.Utilities;
using System;
using System.Diagnostics;
using System.Windows.Controls;
using System.Windows.Navigation;
namespace ONE.UserControls
{
/// <summary>
/// Interaction logic for Logger.xaml
/// </summary>
public partial class Logger : UserControl
{
public Logger()
{
InitializeComponent();
}
public void Initialize(ClientSDK clientSDK)
{
clientSDK.Logger.Event += new EventHandler<ClientApiLoggerEventArgs>(SdkEvent);
}
void SdkEvent(object sender, ClientApiLoggerEventArgs e)
{
this.Dispatcher.Invoke(() =>
{
lsvLogs.Items.Insert(0, new LogItem
{
Timestamp = DateTime.Now,
ElapsedMs = e.ElapsedMs,
Level = e.EventLevel,
Message = e.Message,
Module = e.Module,
HttpStatus = e.HttpStatusCode,
HttpCode = (int)e.HttpStatusCode,
File = e.File
});
});
}
private void OpenPageRequestNavigate(object sender, RequestNavigateEventArgs e)
{
// for .NET Core you need to add UseShellExecute = true
// see https://docs.microsoft.com/dotnet/api/system.diagnostics.processstartinfo.useshellexecute#property-value
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
e.Handled = true;
}
}
}
User Control XAML
<UserControl x:Class="ONE.UserControls.Logger"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ONE.UserControls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<ListView Grid.Column="1" Grid.RowSpan="4" x:Name="lsvLogs" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
<ListView.View>
<GridView>
<GridViewColumn Header="Timestamp" DisplayMemberBinding="{Binding Timestamp}" Width="150"></GridViewColumn>
<GridViewColumn Header="ElapsedMs" DisplayMemberBinding="{Binding ElapsedMs}" Width="70"></GridViewColumn>
<GridViewColumn Header="HttpCode" DisplayMemberBinding="{Binding HttpCode}" Width="70"></GridViewColumn>
<GridViewColumn Header="HttpStatus" DisplayMemberBinding="{Binding HttpStatus}" Width="70"></GridViewColumn>
<GridViewColumn Header="Level" DisplayMemberBinding="{Binding Level}" Width="70"></GridViewColumn>
<GridViewColumn Header="Module" DisplayMemberBinding="{Binding Module}" Width="100"></GridViewColumn>
<GridViewColumn Header="Message" DisplayMemberBinding="{Binding Message}" Width="500"></GridViewColumn>
<GridViewColumn Header="Log" Width="500">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="urlToContent" MinWidth="100" Width="Auto">
<Hyperlink NavigateUri="{Binding Path=File}" Name="Log" RequestNavigate="OpenPageRequestNavigate">
<TextBlock Text="{Binding Path=File}"/>
</Hyperlink>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>