(WPF)Serilog 使用demo实例

Serilog 日志效果:

引入的Serilog库文件

实现代码

xaml 代码:

<Window x:Class="Wpf_demo_Serilog.MainWindow"

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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:Wpf_demo_Serilog"

mc:Ignorable="d"

Title="MainWindow" Height="350" Width="600">

<Grid>

<StackPanel Orientation="Horizontal" Height="50" Width="300">

<Button Content="info log" Click="Button_Click" Margin="10"/>

<Button Content="error log" Click="Button_Click_1" Margin="10"/>

<Button Content="debug log" Click="Button_Click_2" Margin="10"/>

</StackPanel>

</Grid>

</Window>

xaml.cs 代码:

using System.Threading.Tasks;

using System.Windows;

namespace Wpf_demo_Serilog

{

public partial class MainWindow : Window

{

// at the beginning of the class

private static Serilog.ILogger Logger => Serilog.Log.ForContext<MainWindow>();

public MainWindow()

{

InitializeComponent();

}

private void Button_Click(object sender, RoutedEventArgs e)

{

Logger.Information("Hello World!");

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

Logger.Information("Hello World!");

TestClass1 tc = new TestClass1();

tc.TestLog();

}

private void Button_Click_2(object sender, RoutedEventArgs e)

{

Logger.Debug("Hello China!");

Task.Run(() =>

{

Logger.Information("HI~!");

});

}

}

}

cs 代码:

using Serilog;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Reflection;

using System.Runtime.CompilerServices;

using System.Text;

using System.Threading.Tasks;

namespace Wpf_demo_Serilog

{

public class TestClass1

{

private static Serilog.ILogger Logger => Serilog.Log.ForContext<TestClass1>();

public void TestLog()

{

try

{

int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers[9]); // 不存在会报错!

}

catch (Exception ex)

{

Logger.Error(ex.ToString());

}

}

}

}

using Serilog;

using Serilog.Configuration;

using Serilog.Core;

using Serilog.Events;

using System;

using System.Diagnostics;

using System.Linq;

using System.Reflection;

using System.Text;

using System.Threading;

using System.Windows;

using System.Windows.Threading;

namespace Wpf_demo_Serilog

{

public partial class App : Application

{

public App()

{

InitLog();

}

private void InitLog()

{

StackTrace trace = new StackTrace();

//获取是哪个类来调用的

string sourceClass = trace.GetFrame(1).GetMethod().DeclaringType.Name;

//LoggingExtensions.WithClassName();

// 创建全局静态实例

Log.Logger = new LoggerConfiguration()

.Enrich.FromLogContext()

.Enrich.WithThreadId()

.Enrich.WithProcessId()

//设置最低等级

.MinimumLevel.Verbose()

//将事件发送到文件

//{Message:lj}表示将消息序列化成json字符串,string类型除外(j表示json,l表示except for string literals)

//{Level:u3}表示将日志等级的输出显示为3个大写字符,如DBG、INF、ERR等。{Level:w3}表示三个字符的小写,

//{Properties:j}用来显示额外的上下文信息

.WriteTo.File(@".\Log\Log.txt", /*日志文件名*/

outputTemplate: /*设置输出格式,显示详细异常信息*/

@"{Timestamp:yyyy-MM-dd HH:mm-ss.fff }[{Level}] (ThreadId:{ThreadId} ProcessId:{ProcessId} Class:{SourceContext}) {Message:lj}{NewLine}{Exception}",

rollingInterval: RollingInterval.Day, /*日志按日保存*/

rollOnFileSizeLimit: true, /*限制单个文件的最大长度*/

encoding: Encoding.UTF8, /*文件字符编码*/

retainedFileCountLimit: 10, /*最大保存文件数*/

fileSizeLimitBytes: 10 * 1024) /*最大单个文件长度*/

.CreateLogger();

}

protected override void OnStartup(StartupEventArgs e)

{

this.DispatcherUnhandledException += App_DispatcherUnhandledException;

this.Dispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;

this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;

base.OnStartup(e);

}

private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)

{

Log.Error("[App_DispatcherUnhandledException] " + e?.Exception);

e.Handled = true;

}

private void Dispatcher_UnhandledExceptionFilter(object sender, DispatcherUnhandledExceptionFilterEventArgs e)

{

Log.Error("[Dispatcher_UnhandledExceptionFilter] " + e?.Exception);

}

private void Dispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)

{

Log.Error("[Dispatcher_UnhandledException] " + e?.Exception);

e.Handled = true;

}

}

}

相关推荐
当下就是最好1 小时前
WPF应用程序的生命周期-笔记
wpf
九鼎科技-Leo15 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
麻花20131 天前
C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值
开发语言·c#·wpf
lcintj1 天前
【WPF】Prism学习(九)
学习·wpf·prism
界面开发小八哥1 天前
界面控件DevExpress WPF中文教程:网格视图数据布局的列和卡片字段
wpf·界面控件·devexpress·ui开发·用户界面
△曉風殘月〆1 天前
如何在WPF中嵌入其它程序
wpf
Crazy Struggle1 天前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库
shepherd枸杞泡茶2 天前
WPF动画
c#·.net·wpf
lcintj2 天前
【WPF】Prism学习(十)
学习·wpf·prism
wyh要好好学习2 天前
WPF数据加载时添加进度条
ui·wpf