(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(numbers9); // 不存在会报错!

}

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;

}

}

}

相关推荐
一条闲鱼_mytube12 小时前
高并发短链接系统设计
wpf
一个天蝎座 白勺 程序猿1 天前
IoTDB集群扩容:从慌乱到从容的经验分享
数据库·wpf·时序数据库·iotdb
samble2 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
samble3 天前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
蜗牛互联网5 天前
OLMo-core 3的token gerrymandering提醒:MoE路由要按时间窗验收
java·人工智能·wpf
LateFrames6 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
samble6 天前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
SamChan908 天前
PDF页面旋转与CropBox陷阱:译文回填位置总是错位的根因实测
python·ai·pdf·wpf
SamChan909 天前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf
samble16 天前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制